package com.sort;
/**
* 选择排序算法
* 首先,找到数组中最小的那个元素,其次,将它和数组的第1个元素交换位置。
* 再次,在剩下的元素中找到最小的元素,将它与数组的第2个元素交换位置。
* 如此往复,直到将整个数组排序。
*
* 时间复杂度
* 平均情况:O(n2), 最好情况:O(n2), 最坏情况:O(n2)
*
* 空间复杂度
* 辅助存储:O(1)
*
* 稳定性:不稳定
*
*/
public class SelectSort {
public static void sort(Comparable[] a) {
int size = a.length;
for(int i=0; i<size; i++) {
int min = i;
for(int j=i+1; j<size; j++) {
if(less(a[j], a[min])) {
min = j;
}
}
swap(a, i, min);
}
}
private static boolean less(Comparable v, Comparable w) {
return v.compareTo(w) < 0;
}
private static void swap(Comparable[] a, int i, int j) {
Comparable t = a[i];
a[i] = a[j];
a[j] = t;
}
public static void show(Comparable[] a) {
for(int i=0; i<a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
Integer[] a = {2, 34, 17, 54, 90, 20, 1, 5, 8};
sort(a);
show(a);
}
}