选择排序的思想是从待排序的部分中找出其最小(或最大)的值,并插入到有序序列中。基于这个思想,我们可以很快地实现其过程。代码如下。
#include <bits/stdc++.h>
using namespace std;
int *create_rand_arr() {
/*生成随机整数数组指针函数*/
int length = 10; // 定义长度为10
srand(time(0)); // 设置时间种子
int *rand_arr = new int [length];
for (int i = 0; i < length; i++) {
rand_arr[i] = rand() % (100 - -100 + 1) + -100; // 将随机数填充进数组指针中
}
return rand_arr;
}
int get_length(int *arr) {
/*获取数组指针的长度*/
return _msize(arr) / sizeof(*arr);
}
void select_sort(int *arr) {
/*选择排序函数(递减)*/
int k, l, length = get_length(arr);
for (int i = 0; i < length - 1; i++) {
for (int j = i + 1; j < length; j++) { // 遍历
if (arr[j] > arr[i]) { // 比较
k = arr[i];
l = arr[j];
arr[j] = k;
arr[i] = l;
}
}
/*
// 输出调试信息
printf("第 %d 次排序后的结果: ", i + 1);
for (int k = 0; k < length; k++) {
cout << arr[k] << " ";
}
cout << endl;
*/
}
}
int main() {
int *arr = create_rand_arr(); // 制作随机整数数组
int length = get_length(arr); // 获取长度
// 输出原数组
cout << "原数组: ";
for (int i = 0; i < length; i++) {
cout << arr[i] << " ";
}
cout << endl;
// 使用选择排序函数进行排序
select_sort(arr);
// 输出新数组
cout << "新数组: ";
for (int i = 0; i < length; i++) {
cout << arr[i] << " ";
}
return 0;
}
运行结果如下。
选择排序算法是一种不稳定的排序算法。它的时间复杂度和空间复杂度如下(其中n为数组长度)。
平均时间复杂度为 O ( n 2 O(n^2 O(n2),最坏时间复杂度为 O ( n 2 ) O(n^2) O(n2),空间复杂度为 O ( 1 ) O(1) O(1)。