思想
将数组看为完全无序数组,遍历无序区间找出最大元素,与无序区间的最后一个进行交换,重复此过程直至数组完全有序。
代码
public static void selSort(int[] array){
//n个数,需要比较(n-1)趟
for (int i = 0; i <array.length-1 ; i++) {
//1.假设第0号下标的元素为最大元素
int maxIndex=0;
//区间划分
//无序区间:[0,array.length-i)
//有序区间:[array.length-i,array.length)
//遍历找最大元素
for (int j = 1; j <array.length-i; j++) {
if (array[j]>array[maxIndex]){
maxIndex=j;
}
}
//找到最大元素,将其与无序区间的最后一个元素进行交换
swap(array,maxIndex,array.length-i-1);
}
System.out.println(Arrays.toString(array));
}
private static void swap(int[] array, int i, int j) {
int temp=array[i];
array[i]=array[j];
array[j]=temp;
}
复杂度分析
复杂度 | |
---|---|
时间复杂度 | O(n^2) |
空间复杂度 | O(1) |
稳定性 | 不稳定 |