选择排序每次从未排序的部分中找出最小(或最大)的元素,放到已排序部分的末尾,直到整个数组排序完成。
#include <stdio.h>
// 选择排序
void selectSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
int minIndex = i; // 记录最小元素索引
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 交换元素
if (minIndex != i) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
// 打印输出
void printArray(int arr[], int n) {
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
printf("原始数组: ");
printArray(arr, n);
selectSort(arr, n);
printf("排序后数组: ");
printArray(arr, n);
return 0;
}
运行结果:
时间复杂度:
最好情况下:O(n²)
最坏情况下:O(n²)
平均时间复杂度:O(n²)
空间复杂度:O(1)(原地排序)