选择排序思想:
将数组分成已排序和待排序区间,从待排序区间找出最小元素,放在已排序的末尾。
具体代码实现:
public static void selectSort(int[] array){
int n=array.length;
if (n==1){
return ;
}
//控制循环次数
for (int i=0;i<n;i++){
int minIndex=i;
//寻找待排序区间中的最小元素
for (int j=i+1;j<n;j++){
if (array[j]<array[minIndex]){
//交换下标
minIndex=j;
}
}
//将最小元素插到已排序的末尾
swap(i,minIndex,array);
}
}
测试代码:
public class Test{
public static void main(String[] args) {
int[] arr=new int[]{4,5,6,1,3,2};
selectSort(arr);
print(arr);
}
private static void swap(int[] arr,int IndexA,int IndexB){
int temp=arr[IndexA];
arr[IndexA]=arr[IndexB];
arr[IndexB]=temp;
}
private static void print(int[] arr){
for (int i:arr){
System.out.print(i+"、");
}
}
}
算法分析:
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:不稳定
举例:5,8,5,2,9
下标为0的5和2交换位置后,与下标为2的5相对位置发生了变化。
插入与选择的使用区别?
相同数据集的情况下,推荐选择插入排序,因为选择排序的不稳定。