快速排序

      在冒泡排序中,一次扫描只能确保最大数值的数移到正确位置,而待排序序列的长度可能只减少1。
     快速排序是对冒泡排序的一种本质改进。
 
     基本思想:通过一趟扫描后,使得排序序列的长度能大幅度地减少。快速排序通过一趟扫描,就能确保某个数(以它为基准点吧)的左边各数都比它小,右边各数都比它大。然后又用同样的方法处理它左右两边的数,直到基准点的左右只有一个元素为止。
 
     快速排序:不稳定,时间复杂度 最理想 O(nlogn) 最差时间O(n^2)
 
View Code
 1 #include<iostream>
 2 #include<cstring>
 3 
 4 using namespace std;
 5 
 6 int const ic_limit = 100002;
 7 
 8 void vInputData(int &iNum,int iArr[]);
 9 void vQuickSort(int iArr[],int iLeft,int iRight);
10 void vPrintAns(int iNum,int iArr[]);
11 
12 int main()
13 {
14     int iNum;
15     int iArr[ic_limit];
16 
17     memset(iArr,0,sizeof(iArr));
18     vInputData(iNum,iArr);
19     vQuickSort(iArr,1,iNum);
20     vPrintAns(iNum,iArr);
21 
22     return 0;
23 }
24 
25 void vInputData(int &iNum,int iArr[])
26 {
27     cin >> iNum;
28     for(int i=1; i<=iNum; i++)
29     {
30         cin >> iArr[i];
31     }
32 }
33 
34 void vQuickSort(int iArr[],int iLeft,int iRight)
35 {
36     int iKeyValue;
37     int iLow;
38     int iHigh;
39 
40     //以iKeyValue为基准
41     iKeyValue = iArr[iLeft];
42     iLow = iLeft;
43     iHigh = iRight;
44     while(iLow < iHigh)
45     {
46         while((iLow < iHigh) && (iArr[iHigh] >= iKeyValue))
47         {
48             iHigh --;
49         }
50         if(iLow < iHigh)
51         {
52             iArr[iLow] = iArr[iHigh];
53             iLow ++;
54         }
55         while((iLow < iHigh) && (iArr[iLow] <= iKeyValue))
56         {
57             iLow ++;
58         }
59         if(iLow < iHigh)
60         {
61             iArr[iHigh] = iArr[iLow];
62             iHigh --;
63         }
64     }
65     iArr[iLow] = iKeyValue;
66 
67     if(iLeft < (iLow-1))
68     {
69         //对左区间递归排序
70         vQuickSort(iArr,iLeft,iLow-1);
71     }
72     if((iLow+1) < iRight)
73     {
74         //对右区间递归排序
75         vQuickSort(iArr,iLow+1,iRight);
76     }
77 }
78 
79 void vPrintAns(int iNum,int iArr[])
80 {
81     for(int i=1; i<iNum; i++)
82     {
83         cout << iArr[i]  << " ";
84     }
85     cout << iArr[iNum] << endl;
86 }

 


posted on 2012-08-16 16:29  zimulala  阅读(279)  评论(0)    收藏  举报

导航