您的位置:首页 > 其它

常用算法之-快速排序

2015-06-05 10:37 381 查看
一,快速排序

快速排序做为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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: