Java 十大排序算法之选择排序刨析

网友投稿 273 2022-09-14


Java 十大排序算法之选择排序刨析

目录选择排序原理选择排序API设计选择排序代码实现选择排序的时间复杂度

选择排序原理

①假设第一个索引处的元素为最小值,和其他值进行比较,如果当前的索引处的元素大于其他某个索引处的值,则假定其他某个索引处的值为最小值,最后找到最小值所在的索引

②交换第一个索引处和最小值所在的索引处的值

选择排序API设计

类名

Selection

构造方法

Selection():创建Selection对象

成员方法

1.public static void sort(Comparable[] a):对数组内的元素进行排序

2.private static boolean greater(Comparable v,Comparable w):判断v是否大于w

3.private static void exchange(Comparable[] a,int i,int j):交换a数组中,索引i和索引j处的值

选择排序代码实现

public class Selection {

//对数组a中的元素进行排序

public static void sort(CompaSiukKkrable[] a){

for(int i=0;i

int minIndex=i;

for(int j=i+1;j

if(greater(a[minIndex],a[j])){

minIndex=j;

}

}

exchahttp://nge(a,i,minIndex);

}

}

private static boolean greater(Comparable v,Comparable w){

return v.compareTo(w)>0;

}

private static void exchange(Comparable[] a,int i,int j ){

Comparable t=a[i];

a[i]=a[j];

a[j]=t;

}

}

class Test{

public static void main(String[] args) {

Integer[] a={4,6,8,7,9,2,10,1};

Selection.sort(a);

System.out.println(Arrays.toString(a));

}

}

选择排序的时间复杂度

选择排序使用了双层for循环,外层循环完成了数据交换,内层循环完成了数据比较,所以分别统计:数据比较次数:(N-1)+(N-2)+(N-3)+...+2+1=

((N-1)+1)*(N-1)/2=N^2/2-N/2;

数据交换次数:N-1;

时间复杂度: N^2/2-N/2+(N-1)=N^2/2+N/2-1;

根据大O推导法则,保留最高阶项,去除常数因子,时间复杂度为O(N^2)

int minIndex=i;

for(int j=i+1;j

if(greater(a[minIndex],a[j])){

minIndex=j;

}

}

exchahttp://nge(a,i,minIndex);

}

}

private static boolean greater(Comparable v,Comparable w){

return v.compareTo(w)>0;

}

private static void exchange(Comparable[] a,int i,int j ){

Comparable t=a[i];

a[i]=a[j];

a[j]=t;

}

}

class Test{

public static void main(String[] args) {

Integer[] a={4,6,8,7,9,2,10,1};

Selection.sort(a);

System.out.println(Arrays.toString(a));

}

}

选择排序的时间复杂度

选择排序使用了双层for循环,外层循环完成了数据交换,内层循环完成了数据比较,所以分别统计:数据比较次数:(N-1)+(N-2)+(N-3)+...+2+1=

((N-1)+1)*(N-1)/2=N^2/2-N/2;

数据交换次数:N-1;

时间复杂度: N^2/2-N/2+(N-1)=N^2/2+N/2-1;

根据大O推导法则,保留最高阶项,去除常数因子,时间复杂度为O(N^2)

if(greater(a[minIndex],a[j])){

minIndex=j;

}

}

exchahttp://nge(a,i,minIndex);

}

}

private static boolean greater(Comparable v,Comparable w){

return v.compareTo(w)>0;

}

private static void exchange(Comparable[] a,int i,int j ){

Comparable t=a[i];

a[i]=a[j];

a[j]=t;

}

}

class Test{

public static void main(String[] args) {

Integer[] a={4,6,8,7,9,2,10,1};

Selection.sort(a);

System.out.println(Arrays.toString(a));

}

}

选择排序的时间复杂度

选择排序使用了双层for循环,外层循环完成了数据交换,内层循环完成了数据比较,所以分别统计:数据比较次数:(N-1)+(N-2)+(N-3)+...+2+1=

((N-1)+1)*(N-1)/2=N^2/2-N/2;

数据交换次数:N-1;

时间复杂度: N^2/2-N/2+(N-1)=N^2/2+N/2-1;

根据大O推导法则,保留最高阶项,去除常数因子,时间复杂度为O(N^2)


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:网络故障诊断和排除(网络故障诊断和排除原则)
下一篇:iptables 网络管理(iptables添加规则)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~