#选择排序
- 时间复杂度0(n2)
- 空间复杂度0(1)
- 稳定性:不稳定;`
在这里插入代码片
public class SelectTest {
public static void selectSort(int[]array){
//趟数
for(int i=0;i<array.length/2;i++){
int minIndex=i;
//遍历整个数组,找出最小数
for(int j=i+1;j<array.length;j++){
if(array[j]<array[minIndex]){
minIndex=j;
}
}
if(minIndex!=i){
int temp=array[minIndex];
array[minIndex]=array[i];
array[i]=temp;
}
}
}
//优化
public static void optimizedSelect(int []array){
//次数
for(int i=0;i<array.length/2;i++){
int midIndex=i;
int maxIndex=i;
//遍历数组,找出最小和最大的数,小数放左边,大数放右边
//选择排序的过程
for(int j=i+1;j<array.length-i;j++){
if(array[j]>array[maxIndex]){
maxIndex=j;
continue;//大于之后肯定就不小于了
}
if(array[j]<array[midIndex]){
midIndex=j;
}
}
int temp=array[midIndex];
array[midIndex]=array[i];
array[i]=temp;
if(maxIndex==i){
maxIndex=midIndex;
}
temp=array[maxIndex];
array[maxIndex]=array[array.length-1-i];
array[array.length-1-i]=temp;
}
}
public static void main(String[] args) {
int [] array={40,33,2,56,78,9,4,3,2,1};
/*selectSort(array);
System.out.println(Arrays.toString(array));*/
optimizedSelect(array);
System.out.println(Arrays.toString(array));
}
//代码运行结果
[1, 2, 2, 3, 4, 9, 78, 56, 33, 40]
[1, 2, 2, 3, 4, 9, 33, 40, 56, 78]