夯实基础——快速排序
来源:互联网 发布:q版地图制作软件 编辑:程序博客网 时间:2024/06/06 06:57
逻辑结构:递归栈
物理结构:数组
快速排序分析:
最优时间复杂度:O(nlog2n)在乱序情况下
最坏时间复杂度:O(n^2) 在顺序情况下
平均时间复杂度:O(nlog2n)
空间复杂度:O(n)
稳定性:不稳定
快速排序主要有两个函数:
1 一次划归 int partition(int a[],int low,int high);
2 递归快速排序 void QuickSort(int a[],int low,int high);
3 非递归快速排序 void NonQuickSort(int *a,int low,int high);(用于解决数据量过大所产生的栈溢出)
//一次划归,pivot左端都比pivot小,pivot右端都比pivot大//返回划归后pivot的位置int partition(int a[],int low,int high){ int pivot=a[low]; while(low<high) { while(low<high&&a[high]>=pivot) --high; a[low]=a[high]; while(low<high&&a[low]<=pivot) ++low; a[high]=a[low]; } a[low]=pivot; return low;}
//递归快速排序void QuickSort(int a[],int low,int high){ int pivot; if(low<high) { pivot=partition(a,low,high); QuickSort(a,low,pivot-1); QuickSort(a,pivot+1,high); }}
//非递归快速排序void NonQuickSort(int *a,int low,int high){ int l,h,pivot; if(low>=high) return ; int *s=(int *)malloc(sizeof(int)*(high-low+1)); int p=0; pivot=partition(a,low,high); if(low<pivot-1) { s[p++]=low; s[p++]=pivot-1; } if(pivot+1<high) { s[p++]=pivot+1; s[p++]=high; } while(p>0) { h=s[--p];//相反顺序取出,后放进去的先取 l=s[--p];//先放进去的后取 pivot=partition(a,l,h); if(l<pivot-1) { s[p++]=l; s[p++]=pivot-1; } if(pivot+1<h) { s[p++]=pivot+1; s[p++]=h; } } free(s);}
1 0
- 夯实基础——快速排序
- 夯实基础——堆排序
- 夯实基础——插入排序
- 夯实基础——希尔排序
- 夯实基础——选择排序
- 夯实基础——归并排序
- 夯实基础——流程控制
- 夯实基础——static关键字
- 算法基础之排序—快速排序
- 夯实基础——从键盘输入的两种方式
- 夯实基础——继承、super和final关键字
- 夯实基础
- 夯实基础
- 基础算法——快速排序
- 算法基础——快速排序
- 基础算法——快速排序
- 基础算法学习笔记—快速排序
- 算法基础4—快速排序
- hdu 4974
- POJ 2195 Going Home(二分图最优匹配)
- validate rules custom
- 媒体移动化需抓住三大要素
- 如何降低白噪声对网站用户体验的影响
- 夯实基础——快速排序
- iOS- UI界面-传值
- 从创业失败中学到的七条教训
- 随手札记
- Protocol Buffer技术深入理解(C++实例)
- 程序员如何应对公司的无理要求?
- ubuntu更新源方法
- JavaScript 开发者经常忽略或误用的七个基础知识点
- Linux在rescue(救援)模式修复GRUB(引导菜单)