<code> quicksort
1 template <class T> 2 void quicksort(T *A ,int left, int right){ 3 T temp,a=A[right]; 4 int i=left-1,j=right; 5 do{ 6 do i++; 7 while(i<right&&A[i]<a); 8 do j--; 9 while(j>left&&A[j]>a); 10 if(i<j) 11 { temp=A[i]; 12 A[i]=A[j]; 13 A[j]=temp; 14 } 15 16 }while(i<j); 17 18 temp=A[right]; 19 A[right]=A[i]; 20 A[i]=temp; 21 22 if(i-1>left) 23 quicksort(A,left,i-1); 24 if(i+1<right) 25 quicksort(A,i+1,right); 26 27 }
1 #include <iostream> 2 #include <time.h> 3 #include <stdlib.h> 4 using namespace std; 5 void Insertsort(int list[],int a,int b){ 6 int next,j; 7 if(a>b)return; 8 for(int x=a;x<=b;x++){ 9 next=list[x]; 10 for(j=x-1;j>=a&&next<list[j];j--) 11 list[j+1]=list[j]; 12 list[j+1]=next; 13 } 14 15 } 16 17 void quicksort(int list[],int left,int right) 18 { 19 int pivot,i,j; 20 int temp,pos; 21 //k取值为10 22 if(right-left<10){Insertsort(list,left,right);}else 23 if(left<right) 24 {//注明:在实现过程中,采用i,j从两边向中间遍历的方法,可进一步提高算法的速度 25 i=left; 26 j=right+1; 27 pos=rand()%(right-left)+left;//采用随机方法 28 pivot=list[pos]; 29 temp=list[left]; 30 list[left]=list[pos]; 31 list[pos]=temp; 32 //pos =left; 33 do 34 { 35 do i++; 36 while(list[i]<pivot); 37 38 39 do j--; 40 while(list[j]>pivot); 41 if(i<j) 42 {temp=list[i]; 43 list[i]=list[j]; 44 list[j]=temp;} 45 }while(i<j); 46 47 temp=list[left]; 48 list[left]=list[j]; 49 list[j]=temp; 50 quicksort(list,left,j-1); 51 quicksort(list,j+1,right); 52 } 53 else return; 54 } 55 56 int main() 57 { 58 int i; 59 int n=1000000; 60 int list[1000000]; 61 62 srand((unsigned)time(NULL)); 63 for(i=0;i<n;i++) 64 list[i]=rand(); 65 66 quicksort(list,0,n-1); 67 // for(i=0;i<n;i+=20) 68 // cout<<" "<<list[i]; 69 70 return 0; 71 }