算法——排序(四)快速排序
2016-06-21 11:15
260 查看
快速排序——对冒泡排序的一种改进
1、时间复杂度O(nlogn)~O(n2)
2、空间复杂度O(logn)~O(n):排序排序需要栈空间实现递归
3、不稳定的
4、快速排序的思想:带排序列经过一次快排划分,可以得到(子序列<key,key,子序列>key),然后对其子序列进行排序
5、递归实现void QSort(int &l,int low, int high),用if(low<high),满足条件后只执行一次,不能用while会一直循环下去
6、快速排序结构
int Partition(int*l, int low, int high);
返回值是key所在位置;实际中用l[0]暗示存放key;key的值时l[low]
void Qsort( int *l, int low, int high) ;
1、时间复杂度O(nlogn)~O(n2)
2、空间复杂度O(logn)~O(n):排序排序需要栈空间实现递归
3、不稳定的
4、快速排序的思想:带排序列经过一次快排划分,可以得到(子序列<key,key,子序列>key),然后对其子序列进行排序
5、递归实现void QSort(int &l,int low, int high),用if(low<high),满足条件后只执行一次,不能用while会一直循环下去
6、快速排序结构
int Partition(int*l, int low, int high);
返回值是key所在位置;实际中用l[0]暗示存放key;key的值时l[low]
void Qsort( int *l, int low, int high) ;
#include <iostream> using namespace std; int partion(int *l, int low, int hig){ l[0]=l[low]; int key=l[low]; while(low<hig){ while(low<hig&&l[hig]>=key) --hig; l[low]=l[hig]; while(low<hig&&l[low]<=key) ++low; l[hig]=l[low]; } l[low]=l[0]; return low; } void QSort(int *l,int low,int hig) { if(low<hig){ int key=partion(l,low,hig); partion(l,low,key-1); partion(l,key+1,hig); } } int main() { cout<<"输入待排序列大小"<<endl; int m=0; cin>>m; cout<<"输入待排序列元素"<<endl; int l[100]; for(int i=1;i<=m;i++) { cin>>l[i]; } cout<<"输出未排序的序列元素"<<endl; for(int i=1;i<=m;i++) { cout<<l[i]<<endl; } QSort(l,1,m); cout<<"输出有序序列元素"<<endl; for(int i=1;i<=m;i++) { cout<<l[i]<<endl; } return 0; }
相关文章推荐
- 三个连续自然数之积
- 、LinearLayout的特点是什么?
- @PathVariable和@RequestParam的区别,@SessionAttributes
- c3p0整合mysql报错问题
- 剑指offer题解 二进制中1的个数
- Oracle创建表语句语法详解
- 8-13userAgent
- android java 回调方法接口
- 聪明人是怎么看世界的?
- LeetCode Add Digits
- vuejsLearn--- v-for列表渲染
- 【shell】 for循环
- MapReduce Streaming
- Spring单例模式与线程安全
- mysql存储过程函数实例-轻松搞定mysql函数
- redis部署
- Dynamics CRM2016 关于修改部署管理员账号权限引发的问题
- docker学习
- ios copy/strong/weak..使用总结
- Dynamics CRM2016 关于修改部署管理员账号权限引发的问题