选择排序
思想:
与冒泡类似,但没有冒泡交换的那么频繁。
前一部分是有序的,有序部分的后一个位置为待排序位置。待排序位置将与后边最小的元素进行位置交换。
一趟确定一个元素的位置。
稳定性 | 时间复杂度 | 空间复杂度 |
---|---|---|
稳定 | O ( n 2 ) O(n^2) O(n2) | O ( 1 ) O(1) O(1) |
package com.atguigu.array;
public class ArraySelect {
public static void main(String[] args) {
int[] arr = new int[]{2,5,7,4,1,9};
System.out.println("选择排序前:");
print(arr);
arr = Select(arr);
System.out.println("选择排序后:");
print(arr);
}
public static void print(int[] arr){
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i == (arr.length-1)){
System.out.println(arr[i] +"]");
} else {
System.out.print(arr[i] + ", ");
}
}
}
public static int[] Select(int[] arr){
//次数
for (int count = 0; count < arr.length-1; count++){
int index = count;
System.out.println("第"+ (count + 1) +"次:");
for (int i = count+1; i < arr.length; i++ ){
if (arr[index]>arr[i]){
index = i;
System.out.println("index = " + index);
}
}
if (index != count){
int temp = arr[index];
arr[index] = arr[count];
arr[count] = temp;
}
print(arr);
}
return arr;
}
}
结果:
在第2次比较过程中,可以发现在找到比待排序位置小的元素的时候,没有立马交换位置。而是继续遍历比较有没有更小的元素,直至找到最小的再进行交换。