快速排序(c++代码)

 1 #include <iostream>
 2 using namespace std;
 3 int pt[1000000];
 4 void quicksort(int*,int,int);
 5 void insert(int*,int,int);
 6 int main()
 7 {
 8     int num,i=0,L;
 9     while(cin>>num)
10     {
11        pt[i++]=num;
12        if(cin.get()=='\n') break;
13     }
14     L=i;
15     int left=0,right=L-1;
16     quicksort(pt,left,right);
17 
18     for(i=0;i<L;i++) 
19     cout<<pt[i]<<" ";
20 }
21 void quicksort(int*pt,int left,int right)
22 {
23     if(left>right-10) insert(pt,left,right);
24     else{
25 
26 
27    int l=left,r=right,num;
28    int pivot=(left+right)/2;
29    
30    num=pt[pivot];pt[pivot]=pt[r];pt[r]=num;
31    pivot=r;
32 
33  while(l<r){
34     
35     
36     
37 
38    while(pt[l]<pt[pivot]) l++;
39    
40    while(pt[r]>=pt[pivot]) r--;
41     
42    num=pt[l];pt[l]=pt[r];pt[r]=num;
43             }
44 
45  num=pt[l];pt[l]=pt[r];pt[r]=num;
46  
47  num=pt[l];pt[l]=pt[pivot];pt[pivot]=num;
48 
49  quicksort(pt,left,l-1);
50  quicksort(pt,l+1,right);
51     
52     
53     }
54 }
55 void insert(int*pt,int left,int right)
56 {    
57     int i,j,min,num;
58     for(i=left;i<=right-1;i++)
59     {
60     min=i;
61     for(j=i+1;j<=right;j++)
62         if(pt[min]>pt[j])min=j;
63     
64     num=pt[min];pt[min]=pt[i];pt[i]=num;
65     }
66 }

 

posted on 2012-11-30 20:35  Besion王  阅读(232)  评论(0)    收藏  举报

导航