快速排序c++实现

来源:互联网 发布:java电商网站 编辑:程序博客网 时间:2024/06/06 12:01
#include<iostream>#include<time.h>#include<vector>using namespace std;//template<typename T>template<typename T>int partition(vector<T> &vec,int left,int right);template<typename T>void quicksort(vector<T> &vec,int left,int right);int main(){ int num; clock_t start,finish;double duration; cout<<"please input the number of vector:"; cin>>num; vector<int> vec(num); srand(time(0)); for(vector<int>::size_type x=0;x!=vec.size();x++)   vec[x]=rand()%100; cout<<"the vector is:"; for(vector<int>::size_type x=0;x!=vec.size();x++)  cout<<vec[x]<<" ";cout<<endl; start=clock(); quicksort(vec,0,vec.size()-1); finish = clock();    //duration = (double)(finish - start) / CLOCKS_PER_SEC; duration = finish-start; cout<<"Time to do quicksort of"<<num<<" numbers is "<<duration<<" milliseconds."<<endl; cout<<"after quicksort,the vector is:";  for(vector<int>::size_type x=0;x!=vec.size();x++)  cout<<vec[x]<<" ";cout<<endl; return 0;}template<typename T>int partition(vector<T> &vec,int left,int right){ T pivotkey=vec[left]; while(left<right){  while(left<right&&vec[right]>=pivotkey) right--;  vec[left]=vec[right];  while(left<right&&vec[left]<=pivotkey) left++;  vec[right]=vec[left]; } vec[left]=pivotkey; return left;}template<typename T>void quicksort(vector<T> &vec,int left,int right){ if(left<right){  int pivotloc=partition(vec,left,right);  quicksort(vec,left,pivotloc-1);  quicksort(vec,pivotloc+1,right); }}

一写才发现自己又是好多地方忘记了,就一个检验时间花费的东西原来都多次用到的,但真写的时候就给忘了,还得搬出msdn copy。

partition上课讲的比较多,写着比较顺当,vector还是搬出primer才用上的,更别提vector的高级用法了