选择排序
- 特点: 每次在剩下的元素中选择值最小的元素,和当前元素进行交换
- 缺点: 相比于冒泡排序,交换的次数少了,但是比较的次数依然很多
时间空间复杂度
排序算法 | 平均时间复杂度 | 最好时间复杂度 | 最坏时间复杂度 | 空间复杂度 | 稳定性 |
---|
选择排序 | O(n^2) | O(n^2) | O(n^2) | O(1) | 不稳定 |
代码
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
void ChoiceSort(int arr[], int size) {
for(int i = 0; i < size -1; i++) {
int min = arr[i];
int k = i;
for (int j = i + 1; j < size; j++) {
if (arr[j] < min) {
min = arr[j];
k = j;
}
}
if (k != i) {
int tmp = arr[i];
arr[i] = arr[k];
arr[k] = tmp;
}
}
}
int main() {
int arr[10];
srand(time(nullptr));
for (int i = 0; i < 10; i++) {
arr[i] = rand() % 100 + 1;
}
for (int v : arr) {
cout << v << " ";
}
cout << endl;
ChoiceSort(arr, 10);
for (int v : arr) {
cout << v << " ";
}
cout << endl;
return 0;
}
测试
➜ build git:(main) ✗ ./ChoiceSort
54 30 42 21 69 92 92 89 57 25
21 25 30 42 54 57 69 89 92 92