简单选择排序的算法
第一趟,从 n 个元素中找出关键字最小的元素与第一个元素交换;
第二趟,在从第二个元素开始的 n-1 个元素中再选出关键字最小的元素与第二个元素交换;
如此,第 k 趟,则从第 k 个元素开始的 n-k+1 个元素中选出关键字最小的元素与第 k 个元素交换,
直到整个序列按关键字有序.
如图所示:
代码实现:
public static void seSort(int[] arr){
int temp=0;
int minIndex=0;
for(int i=0;i<arr.length-1;i++){
minIndex=i;//认为当前i就是最小值的下标,记录下来
for(int j=i+1;j<arr.length;j++){
if(arr[j]<arr[minIndex]){
minIndex=j;//记录最新的最新值下标
}
}
//遍历一遍找到最小值
if(i!=minIndex){//交换第一个值与最小值
temp=arr[i];
arr[i]=arr[minIndex];
arr[minIndex]=temp;
}
}
}
简单选择排序的分析
空间效率:显然简单选择排序只需要一个辅助空间。
时间效率:在简单选择排序中,所需移动元素的次数较少,在待排序序列已经有序的情况下,
简单选择排序不需要移动元素,在最坏的情况下,即待排序序列本身是逆序时,则移
动元素的次数为 3(n-1)。然而无论简单选择排序过程中移动元素的次数是多少,在任何情况
下,简单选择排序都需要进行n(n-1)/2 次比较操作,因此简单选择排序的时间复杂度为Ο(n^2 )。
稳定性:不稳定