快速排序 C语言代码 空间复杂度时间复杂度
思路: 每次选中一个枢轴(基准)元素,将表中比枢轴小的放在枢轴左边,将比枢轴大的放到右边,像这样将表划分为两个子表,再对两个子表进行同样的操作。
代码:
/*快速排序*/
#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语言代码 空间复杂度时间复杂度相关推荐
- 快速排序c语言实现,快速排序的C语言代码实现
快速排序实质上是对"冒泡排序"的一种改进,整个排序过程可概括为:通过N趟的排序将原本的排序数据分为若干块进行分块排序,而在每趟排序过程中,以指定的关键字将待排数据分别分为比关键字大 ...
- 快速排序程序c语言,C语言实现的快速排序算法的代码
工作期间,将开发过程中经常用到的代码片段记录起来,如下代码段是关于C语言实现的快速排序算法的代码,应该对各朋友也有用处. #include #include while(l--) { } } if ( ...
- c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)
原标题:10 大经典排序算法(动图演示+ C 语言代码) 来源:C语言与CPP编程 以前也零零碎碎发过一些排序算法,但排版都不太好,又重新整理一次,排序算法是数据结构的重要部分,系统地学习很有必要. ...
- 【排序算法】简单选择排序及实例_C语言代码实现_Python代码实现
博客对您有所帮助的话,欢迎给个赞啦,你的鼓励是对我最大的支持! 有不足之处也请您评论指教 简单选择排序 简单选择排序是选择排序的一种. 问:那么什么是选择排序? 答:每趟从待排序的记录中选出关键字最小 ...
- 超详细八大排序+基数排序(图文并茂+动图演示+C语言代码演示)
超详细八大排序+基数排序(图文并茂+动图演示+C语言代码演示) 插入排序-直接插入排序 插入排序-希尔排序 选择排序-直接选择排序 选择排序-堆排序 交换排序-冒泡排序 交换排序-快速排序-三种方法( ...
- 数据结构与算法|马踏棋盘算法(小甲鱼)C语言代码的算法分析
马踏棋盘算法(骑士周游问题)的算法分析 C语言代码部分来自小甲鱼的<数据结构与算法> 文章目录 马踏棋盘算法(骑士周游问题)的算法分析 一.C语言代码实现 二.代码分析与算法思路 题目要求 ...
- 遗传算法c语言程序,遗传算法c语言代码.doc
遗传算法c语言代码 遗传算法代码 #include #include #include #include #include struct group //染色体的结构 { int city[citie ...
- 071_html语言代码
1. ISO语言代码 1.1. 国际标准化组织(International Organization for Standardization, ISO)简称ISO, 是一个全球性的非政府组织, 是国际 ...
- 嵌入式C语言代码规范
C语言代码规范 参考安富莱C语言编码规范 1.文件与目录 1.文件及目录的命名规定可用的字符集是[A-Z:a-z:0-9:._-]. 2.源文件名后缀用小写字母 .c 和.h. 3.文件的命名要准确清 ...
- java 与c 运行效率_Java语言与C语言代码运行效率的比较
<Java语言与C语言代码运行效率的比较>由会员分享,可在线阅读,更多相关<Java语言与C语言代码运行效率的比较(2页珍藏版)>请在人人文库网上搜索. 1.Java语言与C语 ...
最新文章
- Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色
- win7 64bit下最新Apahe2.4.18+php7.0.2+MySQL5.7.10配置
- 自媒体各大平台收益对比_哪些自媒体平台没有新手期,适合小白撸收益?
- 【C语言简单说】十三:变量的生命周期
- Linux 下的推迟执行
- Vim配置文件(.vimrc),Vim配置教程
- 邢台市初中计算机考试,2019年邢台中考总分多少分,邢台中考各个科目多少分
- JanusGraph
- win10 干净卸载anaconda
- MDM页面UI升级介绍
- 深度学习与计算机视觉教程(5) | 卷积神经网络(CV通关指南·完结)
- 傅里叶级数 画初音 附底层代码
- SAP S4 OP/Cloud大乱斗(转载)
- 7-6 华氏度转摄氏度(四舍五入)
- QT UDP通信(单播、广播、组播)
- Manjaro美化 配置教程
- Linux进程间通信(上)
- [BZOJ 1778][Usaco2010 Hol]Dotp 驱逐猪猡
- 打印、报表和文档-家谱树
- Python基础:异常处理