常用算法之-快速排序
2015-06-05 10:37
381 查看
一,快速排序
快速排序做为o(nlogn)的内存排序算法,在日常工作和工作面试过程中出镜率也是相当的高。
最差的情况是快速排序的时间复杂度会下降到冒泡的级别,即 o(n*n)
有一些方法来规避这个问题,比如选择随机的枢纽记录。
下出给出了一个,固定枢纽记录的方法。
二,C++代码
三,执行结果
快速排序做为o(nlogn)的内存排序算法,在日常工作和工作面试过程中出镜率也是相当的高。
最差的情况是快速排序的时间复杂度会下降到冒泡的级别,即 o(n*n)
有一些方法来规避这个问题,比如选择随机的枢纽记录。
下出给出了一个,固定枢纽记录的方法。
二,C++代码
/************************************************************************* > File Name: singleton.cpp > Author:zhangtx > Mail: <a target=_blank href="mailto:18510665908@163.com">18510665908@163.com</a> > Created Time: 2015年06月04日 星期四 17时19分17秒 ************************************************************************/ #include<iostream> using namespace std; template<class T> void printResult(int left,int right,T data[]) { cout<<endl<<"**************************************************************"<<endl; for(int idx=left;idx<=right;idx++) cout<<data[idx]<<" "; } template<class T> int partition(int left,int right,T data[]) { //fix priovt T tmpData=data[(left+right)/2]; T tmp=data[left]; data[(left+right)/2]=tmp; data[left]=tmpData; while(left<right) { while(data[right]>=tmpData && left<right) right--; data[left]=data[right]; while(data[left]<=tmpData && left<right) left++; data[right]=data[left]; } data[left]=tmpData; cout<<endl<<"sorting"<<endl; printResult(0,11,data); return left; } template<class T> void quickSort(int left,int right,T data[]) { if (left < right) { int pos=partition<int>(left,right,data); quickSort(left,pos-1,data); quickSort(pos+1,right,data); } } int main(int argc,char *argv[]) { int testData[]={53,5,7,19,12,324,46,76,98,111,2322,343}; cout<<endl<<"sorting before"<<endl; printResult<int>(0,11,testData); quickSort<int>(0,11,testData); cout<<endl<<"sorting result"<<endl; printResult<int>(0,11,testData); return 0; }
三,执行结果
sorting before ************************************************************** 53 5 7 19 12 324 46 76 98 111 2322 343 sorting ************************************************************** 111 5 7 19 12 53 46 76 98 324 2322 343 sorting ************************************************************** 7 5 12 19 111 53 46 76 98 324 2322 343 sorting ************************************************************** 5 7 12 19 111 53 46 76 98 324 2322 343 sorting ************************************************************** 5 7 12 46 19 53 111 76 98 324 2322 343 sorting ************************************************************** 5 7 12 19 46 53 111 76 98 324 2322 343 sorting ************************************************************** 5 7 12 19 46 53 76 111 98 324 2322 343 sorting ************************************************************** 5 7 12 19 46 53 76 98 111 324 2322 343 sorting ************************************************************** 5 7 12 19 46 53 76 98 111 324 343 2322 sorting result ************************************************************** 5 7 12 19 46 53 76 98 111 324 343 2322
相关文章推荐
- js table增加一行,显示每列总和
- samba4安装使用
- 【C++】多个类的DLL封装及调用
- Android之StrictMode应用性能分析
- 喜欢、爱
- 判断一个对象是否为jquery对象的方法
- suibi
- Sublime Text 2 和 Verilog HDL
- [iOS]CocoaPods安装
- VARCHAR2 占几个字节? NLS_LENGTH_SEMANTICS,nls_language
- linux下删除默认mysql和安装mysql5.6以及1130错误
- 客户管理系统之模块设计(七)
- disable_irq()与disable_irq_nosync()区别
- swift container server 莫名stuck
- yii2.0 ajax无法提交问题
- 判断访客终端类型集锦
- 球差
- C#中List怎么用?List基础用法汇总
- a sealed resource is missing or invalid
- EditText显示光标