思路: 每次选中一个枢轴(基准)元素,将表中比枢轴小的放在枢轴左边,将比枢轴大的放到右边,像这样将表划分为两个子表,再对两个子表进行同样的操作。

代码:

/*快速排序*/
#include <stdio.h>int Partition(int a[],int low,int high){    //划分子表 int pivot=a[low];                       //将表的第一个元素作为枢轴(基准) while(low<high){                        //当low小于high时 while(low<high&&a[high]>pivot)      //high一直往左直到找到一个比枢轴小的 high--;a[low]=a[high];                     //把该较小元素放到low位置 while(low<high&&a[low]<pivot)       //low一直往右直到遇到一个比枢轴大的 low++;a[high]=a[low];                     //把该较大元素放到high位置 }a[low]=pivot;                           //最后把枢轴放到low位置 return low;
} void QuickSort(int a[],int low,int high){if(low<high){int pivotpos=Partition(a,low,high);QuickSort(a,low,pivotpos-1);         //对左子表快排 QuickSort(a,pivotpos+1,high);}
}int main(void){int a[9]={56,24,98,77,13,36,43,65,81};QuickSort(a,0,8);for(int i=0;i<9;i++){printf("%d ",a[i]);}return 0;
}

空间复杂度: 因为需要借助一个递归工作栈,栈容量与递归调用最大深度一致,所以最好O(log2n),最坏O(n),平均O(log2n)

时间复杂度: 时间与划分是否对称有关,最好O(n log2n),最坏(基本有序/逆序,此时递归树是单链表,树高n)O(n²) 平均O(n log2n)

改进: 效率低是因为划分的子表极度不平衡,可以
(1)取头、尾、中三个元素的中间值作为枢轴元素
(2)随机选一个元素作为枢轴元素

稳定性: 在移动过程中会改变原来的相对顺序,不稳定

注意:
(1)快速排序是内部排序中性能最优的排序算法
(2)不产生子序列,但每趟后都将枢轴(基准)元素放到最终位置

快速排序 C语言代码 空间复杂度时间复杂度相关推荐

  1. 快速排序c语言实现,快速排序的C语言代码实现

    快速排序实质上是对"冒泡排序"的一种改进,整个排序过程可概括为:通过N趟的排序将原本的排序数据分为若干块进行分块排序,而在每趟排序过程中,以指定的关键字将待排数据分别分为比关键字大 ...

  2. 快速排序程序c语言,C语言实现的快速排序算法的代码

    工作期间,将开发过程中经常用到的代码片段记录起来,如下代码段是关于C语言实现的快速排序算法的代码,应该对各朋友也有用处. #include #include while(l--) { } } if ( ...

  3. c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)

    原标题:10 大经典排序算法(动图演示+ C 语言代码) 来源:C语言与CPP编程 以前也零零碎碎发过一些排序算法,但排版都不太好,又重新整理一次,排序算法是数据结构的重要部分,系统地学习很有必要. ...

  4. 【排序算法】简单选择排序及实例_C语言代码实现_Python代码实现

    博客对您有所帮助的话,欢迎给个赞啦,你的鼓励是对我最大的支持! 有不足之处也请您评论指教 简单选择排序 简单选择排序是选择排序的一种. 问:那么什么是选择排序? 答:每趟从待排序的记录中选出关键字最小 ...

  5. 超详细八大排序+基数排序(图文并茂+动图演示+C语言代码演示)

    超详细八大排序+基数排序(图文并茂+动图演示+C语言代码演示) 插入排序-直接插入排序 插入排序-希尔排序 选择排序-直接选择排序 选择排序-堆排序 交换排序-冒泡排序 交换排序-快速排序-三种方法( ...

  6. 数据结构与算法|马踏棋盘算法(小甲鱼)C语言代码的算法分析

    马踏棋盘算法(骑士周游问题)的算法分析 C语言代码部分来自小甲鱼的<数据结构与算法> 文章目录 马踏棋盘算法(骑士周游问题)的算法分析 一.C语言代码实现 二.代码分析与算法思路 题目要求 ...

  7. 遗传算法c语言程序,遗传算法c语言代码.doc

    遗传算法c语言代码 遗传算法代码 #include #include #include #include #include struct group //染色体的结构 { int city[citie ...

  8. 071_html语言代码

    1. ISO语言代码 1.1. 国际标准化组织(International Organization for Standardization, ISO)简称ISO, 是一个全球性的非政府组织, 是国际 ...

  9. 嵌入式C语言代码规范

    C语言代码规范 参考安富莱C语言编码规范 1.文件与目录 1.文件及目录的命名规定可用的字符集是[A-Z:a-z:0-9:._-]. 2.源文件名后缀用小写字母 .c 和.h. 3.文件的命名要准确清 ...

  10. java 与c 运行效率_Java语言与C语言代码运行效率的比较

    <Java语言与C语言代码运行效率的比较>由会员分享,可在线阅读,更多相关<Java语言与C语言代码运行效率的比较(2页珍藏版)>请在人人文库网上搜索. 1.Java语言与C语 ...

最新文章

  1. Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色
  2. win7 64bit下最新Apahe2.4.18+php7.0.2+MySQL5.7.10配置
  3. 自媒体各大平台收益对比_哪些自媒体平台没有新手期,适合小白撸收益?
  4. 【C语言简单说】十三:变量的生命周期
  5. Linux 下的推迟执行
  6. Vim配置文件(.vimrc),Vim配置教程
  7. 邢台市初中计算机考试,2019年邢台中考总分多少分,邢台中考各个科目多少分
  8. JanusGraph
  9. win10 干净卸载anaconda
  10. MDM页面UI升级介绍
  11. 深度学习与计算机视觉教程(5) | 卷积神经网络(CV通关指南·完结)
  12. 傅里叶级数 画初音 附底层代码
  13. SAP S4 OP/Cloud大乱斗(转载)
  14. 7-6 华氏度转摄氏度(四舍五入)
  15. QT UDP通信(单播、广播、组播)
  16. Manjaro美化 配置教程
  17. Linux进程间通信(上)
  18. [BZOJ 1778][Usaco2010 Hol]Dotp 驱逐猪猡
  19. 打印、报表和文档-家谱树
  20. Python基础:异常处理

热门文章

  1. linux SD卡驱动
  2. 中职学校计算机基础的重要性,中职非计算机专业学生计算机基础教学浅探
  3. 硬盘pe安装红旗linux系统,WinPE 安装操作系统详细图解(图文教程)
  4. 有效利用GRE红宝书
  5. ssh框架的基本运用
  6. Portainer中文汉化
  7. java layoutinflater_安卓 LayoutInflater详解
  8. AspNetPager分页控制
  9. 介绍一个很好的英语学习软件——单词风暴
  10. 硬盘数据恢复软件免费版有免费使用的吗