常见排序算法深度评测:从原理到10万级数据实战
摘要
本文系统解析冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序和基数排序8种经典算法,通过C语言实现10万随机数排序并统计耗时。测试显示:快速排序综合性能最优(0.12秒),冒泡排序最慢(32.7秒)。算法效率差异显著,时间复杂度从O(n2)O(n^2)O(n2)到O(nlogn)O(n\log n)O(nlogn)不等。文中提供完整代码实现、时间复杂度对比表及场景选择建议,为工程实践提供直接参考。

一、算法原理与实现
1. 冒泡排序
原理:通过相邻元素比较交换,使最大元素逐渐"浮"到数组末端
时间复杂度:O(n2)O(n^2)O(n2)
#include <stdio.h>
#include <stdlib.h>
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n-1; i++)
for (int j = 0; j < n-i-1; j++)
if (arr[j] > arr[j+1])
swap(&arr[j], &arr[j+1]);
}
实测耗时:32.7秒
小结:实现简单但效率最低,仅适合教学演示
2. 选择排序
原理:每次选择最小元素放到已排序序列末尾
时间复杂度:O(n2)O(n^2)O(n2)
#include <stdio.h>
#include <stdlib.h>
void selectionSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
int min_idx = i;
for (int j = i+1; j < n; j++)
if (arr[j] < arr[min_idx])
min_idx = j;
swap(&arr[min_idx], &arr[i]);
}
}
实测耗时:14.2秒
小结:比冒泡稍快但仍不适合大数据量
3. 插入排序
原理:将未排序元素插入已排序序列的合适位置
时间复杂度:O(n2)O(n^2)O(n2)
#include <stdio.h>
#include <stdlib.h>
void insertionSort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int key = arr[i], j = i-1;
while (j >= 0 && arr[j] > key) {
arr[j+1] = arr[j];
j--;
}
arr[j+1] = key;
}
}
实测耗时:8.9秒
小结:在小规模或基本有序数据中表现良好
4. 希尔排序
原理:改进的插入排序,通过增量分组进行排序
时间复杂度:O(n1.3)O(n^{1.3})<

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



