版权声明:[email protected] https://blog.csdn.net/qq_271334644/article/details/88343044
直接选择排序:
在元素集合array[i]---array[n-1]中选择关键码最大(小)的数据元素
若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换
在剩余的array[i]---array[n-2]集合中,重复上述步骤,直到集合剩余一个元素
直接选择排序
时间复杂度
最好 | 平均 | 最差 O(n^2) (不敏感)
空间复杂度 O(1)
稳定性:不稳定 { 7, 8, 3a, 5, 3b } 交换无法保证3a 还在 3b 前
程序实现
#include<stdio.h>
void Swap(int *a, int *b) {
int t = *a; *a = *b; *b = t;
}
void SelectSort(int array[], int size) {
// for (i = 1; i < size; i++) {
for (int i = 0; i < size; i++) {
// [0, size - i)
int m = 0;
// for (j = 1 ...)
for (int j = 0; j < size - i; j++) {
if (array[j] > array[m]) {
m = j;
}
}
// m 就是最大数的下标了
Swap(array + m, array + size - i - 1);
}
}
int main() {
int array[] = { 3, 9, 1, 4, 7, 8, 3, 5 };
int size = sizeof(array) / sizeof(int);
SelectSort(array, size);
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
printf("\n");
}