Java 选择排序
龍弟-idea 人气:0选择排序原理
①假设第一个索引处的元素为最小值,和其他值进行比较,如果当前的索引处的元素大于其他某个索引处的值,则假定其他某个索引处的值为最小值,最后找到最小值所在的索引
②交换第一个索引处和最小值所在的索引处的值
选择排序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(Comparable[] a){ for(int i=0;i<a.length-2;i++){ int minIndex=i; for(int j=i+1;j<a.length;j++){ if(greater(a[minIndex],a[j])){ minIndex=j; } } exchange(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)
加载全部内容