news 2026/4/17 20:40:32

快速排序与希尔排序实战解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
快速排序与希尔排序实战解析

一、今天学习目标

  1. 希尔排序(插入排序升级版)
  2. 快速排序(最常用、面试必考)
  3. 完整可运行代码
  4. 复杂度对比

二、希尔排序(Shell Sort)

思想:

  • 分组做插入排序
  • 逐步缩小增量(gap)
  • 最后 gap=1 时就是普通插入排序,但数组已经基本有序,非常快
// 希尔排序 void shellSort(int arr[], int n) { for (int gap = n / 2; gap > 0; gap /= 2) { for (int i = gap; i < n; i++) { int temp = arr[i]; int j; for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) { arr[j] = arr[j - gap]; } arr[j] = temp; } } }

三、快速排序(Quick Sort)

思想:

  • 选一个基准 pivot
  • 小的放左边,大的放右边
  • 递归左右两部分

平均复杂度O(n log n),实际最快。

// 交换 void swap(int *a, int *b) { int t = *a; *a = *b; *b = t; } // 划分函数 int partition(int arr[], int low, int high) { int pivot = arr[high]; int i = low - 1; for (int j = low; j < high; j++) { if (arr[j] < pivot) { i++; swap(&arr[i], &arr[j]); } } swap(&arr[i + 1], &arr[high]); return i + 1; } // 快排递归 void quickSort(int arr[], int low, int high) { if (low < high) { int pi = partition(arr, low, high); quickSort(arr, low, pi - 1); quickSort(arr, pi + 1, high); } }

四、完整测试代码

#include <stdio.h> // swap、shellSort、quickSort、partition 都放这里 void printArr(int arr[], int n) { for (int i = 0; i < n; i++) printf("%d ", arr[i]); printf("\n"); } int main() { int arr1[] = {9, 3, 7, 1, 5, 2, 8, 4, 6}; int n = sizeof(arr1) / sizeof(arr1[0]); printf("原数组:"); printArr(arr1, n); shellSort(arr1, n); printf("希尔排序后:"); printArr(arr1, n); int arr2[] = {9, 3, 7, 1, 5, 2, 8, 4, 6}; quickSort(arr2, 0, n - 1); printf("快速排序后:"); printArr(arr2, n); return 0; }

运行结果:

原数组:9 3 7 1 5 2 8 4 6 希尔排序后:1 2 3 4 5 6 7 8 9 快速排序后:1 2 3 4 5 6 7 8 9

五、复杂度对比

表格

算法时间复杂度稳定性
希尔O(n log n) ~ O(n²)不稳定
快排O (n log n) 平均不稳定

六、今日小练习

对数组{6, 1, 8, 3, 5, 2, 7, 4}分别使用希尔排序、快速排序并输出结果。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 20:38:57

[Matlab-2]从数值到符号:傅里叶级数展开的三种Matlab实现路径

1. 傅里叶级数入门&#xff1a;从数学公式到工程实践 第一次接触傅里叶级数是在大学信号与系统课上&#xff0c;教授在黑板上写下一堆三角函数求和公式时&#xff0c;我完全没意识到这个工具会在后来的工程实践中如此重要。简单来说&#xff0c;傅里叶级数就是把任意周期函数分…

作者头像 李华
网站建设 2026/4/17 20:37:21

CSAPP 3e实验环境构建实战:从虚拟机到WSL的完整指南

1. 环境准备&#xff1a;三种主流方案对比 刚开始接触CSAPP第三版实验时&#xff0c;最头疼的就是环境搭建。我试过虚拟机、双系统和WSL三种方案&#xff0c;实测下来各有优劣。VMware CentOS 7最接近书中推荐环境但占用资源多&#xff0c;原生Ubuntu性能最好但需要重启切换&am…

作者头像 李华
网站建设 2026/4/17 20:33:31

中山高端婚姻家事律师

行业痛点分析在大湾区婚姻家事法律服务领域&#xff0c;高净值家庭面临诸多核心痛点。由于缺乏专业法律指导&#xff0c;在婚姻财产规划、离婚纠纷、子女抚养权、遗产继承等事务中&#xff0c;当事人易因不懂司法规则导致权益受损。办案数据表明&#xff0c;在涉及高净值家庭的…

作者头像 李华