简单选择排序,很明显属于选择排序。
选择排序:每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列。
n个元素的简单选择排序需要n-1趟处理。
代码:
void SelectSort(int A[],int n){int min_idx;//记录最小元素的位置int temp;//n个元素需要n-1趟处理,单独最后一个元素组成的子序列无需再处理//i指向当前待排序子序列的第一个元素for(int i = 0;i< n-1;i++){min_idx = i;for(int j = i+1;j < n;j++){ //在A[i...n-1]中选择最小的元素if(A[j] < A[min_idx]) min_idx = j;}if(min_idx != i){temp = A[min_idx];A[min_idx] = A[i];A[i] = temp;}}
}
无论正序、逆序、还是乱序,一定需要n-1趟处理。
总共需要对比关键字(n-1)+(n-2)+...+1=n(n-1)/2次。
元素交换次数 < n - 1。
时间复杂度 | 无论什么情况都是O(n^2) |
空间复杂度 | O(1) |
稳定性 | 不稳定 |
适用性 | 顺序表、链表都可以 |