快速排序

算法具体解释请参考算法导论

 1 #ifndef QUICKSORT_H
 2 #define QUICKSORT_H
 3 
 4 #include <iostream>
 5 
 6 using namespace std;
 7 
 8 
 9 /*************************************************
10 Function:       // quick_sort
11 Description:    // 快速排序实现
12 Input:          // array: 输入数组
13                 // begin:  数组待排序前端元素下标
14                 // end:   数组待排序末端元素下标
15 Return:         // 无
16 *************************************************/
17 
18 template<class T>
19 void quick_sort(T *array, int begin, int end)
20 {
21     if(begin < end)
22     {
23         int mid = partion(array, begin, end);
24         quick_sort(array, begin, mid - 1);
25         quick_sort(array, mid + 1, end);
26     }
27 }
28 
29 
30 /*************************************************
31 Function:       // partion
32 Description:    // 将给定数组分隔成两部分
33 Input:          // array: 输入数组
34                 // begin:  数组待排序前端元素下标
35                 // end:   数组待排序末端元素下标
36 Return:         // 分隔元素下标
37 *************************************************/
38 template<class T>
39 int partion(T *array, int begin, int end)
40 {
41     int i, j;
42     T x = array[end];
43     i = begin - 1; 
44     T temp;
45     for(j = begin; j < end; ++j)
46     {
47         if(array[j] <= x)
48         {
49             ++i;
50             temp = array[i];
51             array[i] = array[j];
52             array[j] = temp;
53         }
54     }
55     temp = array[end];
56     array[end] = array[i + 1];
57     array[i + 1] = temp;
58     return i + 1;
59 }
60 #endif
61 
62 #include <iostream>
63 #include <ctime>
64 #include <random>
65 #include "quicksort.h"
66 
67 using namespace std;
68 
69 #define  NUM 20
70 
71 int main()
72 {
73     srand(time(0));
74     int array[NUM];
75     for(int i = 0; i < NUM; ++i)
76     {
77         array[i] = rand() % 100;
78     }
79     quick_sort<int>(array, 0, NUM - 1);
80     for (int i = 0; i < NUM; ++i)
81     {
82         cout << array[i] << " ";
83     }
84     cout << endl;
85 }

 

posted on 2013-03-25 16:39  blue firmament  阅读(131)  评论(0编辑  收藏  举报