一、简单选择排序
基本思想:就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换之。
二、简单选择排序代码实例
package Sort;
/**
* Created by LKL on 2017/2/28.
*/
public class TestSelectSort {
public static void main(String[] args){
int[] adj={9,1,5,8,3,7,4,6,2};
SelectSort(adj);
for(int i : adj){
System.out.print(i);
}
}
private static void SelectSort(int[] adj){
int min=0;
int temp=0;
for(int i=0;i<adj.length;i++){
min=i;
for(int j=i+1;j<adj.length;j++){
if(adj[min]>adj[j]){
min=j;
}
}
if(i!=min){
temp=adj[i];
adj[i]=adj[min];
adj[min]=temp;
}
}
}
}
上述代码很容易理解,首先通过关键字的比较,最后再进行数据交换。
三、简单选择排序复杂度分析
由上面的代码可以得到,它最大的特点就是,交换数据的次数非常少,这样就节约了相应的时间。
无论最好还是最坏的情况,其比较次数都是一样的多。第i次排序需要进行n-i次关键字的比较,此时需要比较n-1+n-2+…+1=n(n-1)/2。而对于交换次数来说,当最好的情况,交换为0次,最差的时候,也就是初始排序时,交换次数为n-1次。总的时间为比较和交换数据的总时间,总的时间复杂度为O(n^2).
特别指出的是,尽管与冒泡排序时间复杂度相同,但是简单排序的性能是要优于冒泡排序的。
文章只是作为自己的学习笔记,借鉴了网上的许多案例,如果觉得阔以的话,希望多交流,在此谢过…