1、算法描述
每一趟从待排序列中选择一个最小的放到待排序列的开头。
操作步骤
初始无序区R(1,n),有序区s为空
(1)、从无序区中选择一个最小的,与无序区的第一个数交换,无序区向后退1,有序区加1。
(2)、重复(1),直至无序区剩下最后一个数。
2、图例
3、代码
public void sort(int[] data) {
for (int i = 0; i < data.length - 1; i++) {
int min = i;
for (int j = i; j < data.length; j++) {
if (data[j] < data[min])
min = j;
}
if (min != i) {
swap(data, i, min);
}
}
}
4、稳定性和复杂度
稳定性:选择排序是不稳定的排序。
平均时间复杂度:O(n^2)
选择排序的比较操作为n(n-1)/2,如果序列是升序序列则交换操作为0,反之则为n-1。
空间复杂度:O(1)