一、选择排序是一种不稳定的排序方法,其主要思想是:每趟排序在当前待排序序列中选出关键码最小的记录,添加到有序序列中。通俗理解即:当前值和后序队列中所有制进行比较,选出最小的。
二、代码理解
class SelectSortDemo{
public static void main(String[] args){
int[] arr={10,9,3,4,8,1,7,6,0,5};
sort(arr);
print(arr);
}
//选择排序
public static void sort(int[] arr){
for(int i=0;i<arr.length;i++){
int k=i;
for(int j=i+1;j<arr.length;j++){
if(arr[k]>arr[j]){
k=j; // 记录最小值索引位置
}
}
if(k!=i){
swap(arr,k,i);
}
}
}
// 交换数值
public static void swap(int[] arr,int k,int i){
int temp=arr[i];
arr[i]=arr[k];
arr[k]=temp;
}
// 打印数组
public static void print(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
三、时空复杂度
在待排序序列为正序时,记录的移动次数最少,为0,;在待排序序列为逆序时,记录的移动次数最多,为3(n-1)次。无论记录的初始排列如何,关键码的比较次数相同第i躺排序需要n-i次关键码的比较。
所以:总的时间复杂度为O(n^2)。
在简单选择排序过程中,值需要一个用来作为交换的暂存单元。
所以:空间复杂度为O(1)。