选择排序:将数组分为两个区域,排好序的和未排序的区域,每一趟下来在未排序的区域中找到最小的放在最前面(也可以将最大的放在最后面),持续进行n趟之后,数组有序。
例如:
原数组 3,1,4,2,5
第一趟 1,3,4,2,5
第二趟 1,2,4,3,5
第三趟 1,2,3,4,5
此时排序就已经完成了。代码实现使用双重for循坏即可
时间复杂度 O(n^2) 空间复杂度 O(1) 具有稳定性
public static <T extends Comparable<T>> void selectSort(T[] arr) {
int temp = 0;
for (int i = 0; i < arr.length - 1; i++) {
//每次将temp=i;
temp = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[temp].compareTo(arr[j]) > 0) {
temp = j;
}
}
swap(arr, i, temp);
}
}
swap代码
private static <T>void swap(T[] arr,int i, int j) {
T temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}