Flask接口签名sign原理与实例代码浅析
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~