D&C_快速排序

基本思想:

  (1)分解:以a[p]为基准元素,将其排在正确位置,然后将待排序数组分为三段:a[s : p - 1],a[p],a[p + 1 : e]。

  (2)递归求解

程序:

 1 #include <iostream>
 2 #include <iomanip>
 3 #include <stdlib.h>
 4 #include <ctime>
 5 using namespace std;
 6 
 7 int part(int a[], int s, int e)
 8 {
 9     srand((unsigned)time(NULL));
10     int i = s + rand() % (e - s + 1);
11     //cout<<"i:"<<i<<endl;  //just test
12     swap(a[s], a[i]);
13     int p = s+1; //Alert: 是s+1开始而不是s
14     int q = e;
15     while(p < q) //Good: 双管齐下
16     {
17         //Alert: 加上限制p < e 和 q > s以防越界
18         while(a[p] < a[s] && p < e) p++;
19         while(a[q] >= a[s] && q > s) q--;
20         //cout<<"q: "<<q<<endl; //just test
21         if(p < q)
22         {
23             swap(a[p], a[q]);
24         }
25     }
26     swap(a[q], a[s]);
27     return q;
28 }
29 
30 void quick_sort(int a[], int s, int e)
31 {
32     if(s < e)
33     {
34         int div = part(a, s, e);
35         quick_sort(a, s, div - 1);
36         quick_sort(a, div + 1, e);
37     }
38 }
39 
40 int main()
41 {
42     int a[] = {11,8,9,5,4,6,3,2,3};
43     quick_sort(a,0,8);
44     for(int i = 0; i < 9; i++)
45         cout<<a[i]<<endl;
46     return 0;
47 }

 

posted @ 2014-08-23 22:03  hedgehog小子  阅读(198)  评论(0)    收藏  举报