1. 程式人生 > >劍指offer——面試題11:快速排序

劍指offer——面試題11:快速排序

() value out val small break name space alt

技術分享圖片
 1 #include"iostream"
 2 #include"random"
 3 using namespace std;
 4 
 5 /*
 6 void Swap(int &a,int &b)
 7 {
 8     int tmp;
 9     tmp=a;
10     a=b;
11     b=tmp;
12 }
13 */
14 //官方給的partition函數
15 int Partition1(int *data,int start,int end)
16 {
17     int index=start+(rand()%(end-start+1));
18 swap(data[index],data[end]); 19 int small=start-1; 20 for(index=start;index<end;index++) 21 { 22 if(data[index]<data[end]) 23 { 24 small++; 25 if(index!=small) 26 swap(data[index],data[small]); 27 } 28 } 29 small++;
30 swap(data[small],data[end]); 31 return small; 32 } 33 34 //自定義Partition函數 35 int Partition2(int *data,int start,int end) 36 { 37 int value=data[start]; 38 while(start<end) 39 { 40 while(start<end) 41 { 42 if(data[end]>value) 43 end--;
44 else 45 break; 46 } 47 if(start<end) 48 data[start++]=data[end]; 49 while(start<end) 50 { 51 if(data[start]<=value) 52 start++; 53 else 54 break; 55 } 56 if(start<end) 57 data[end--]=data[start]; 58 } 59 data[start]=value; 60 return start; 61 } 62 63 void QuickSort1(int *data,int start,int end) 64 { 65 if(start==end) return; 66 67 int mid=Partition1(data,start,end); 68 if(mid>start) 69 QuickSort1(data,start,mid-1); 70 if(mid<end) 71 QuickSort1(data,mid+1,end); 72 } 73 74 void QuickSort2(int *data,int start,int end) 75 { 76 if(start==end) return; 77 78 int mid=Partition2(data,start,end); 79 if(mid>start) 80 QuickSort2(data,start,mid-1); 81 if(mid<end) 82 QuickSort2(data,mid+1,end); 83 }
QuickSort.h 技術分享圖片
 1 #include"QuickSort.h"
 2 
 3 void Test1()
 4 {
 5     int data[10]={6,4,1,5,2,9,8,10,3,7};
 6     cout<<"use QuickSort1:";
 7     QuickSort1(data,0,9);
 8     for(int i=0;i<10;i++)
 9         cout<<data[i]<<" ";
10     cout<<endl;
11 }
12 
13 void Test2()
14 {
15     int data[10]={6,4,1,5,2,9,8,10,3,7};
16     cout<<"use QuickSort2:";
17     QuickSort2(data,0,9);
18     for(int i=0;i<10;i++)
19         cout<<data[i]<<" ";
20     cout<<endl;
21 }
22 int main()
23 {
24     Test1();
25     Test2();
26 }
TestQuickSort.cpp

劍指offer——面試題11:快速排序