各种排序算法小结

 

快速排序

 1 #include <exception>
 2 #include <time.h>
 3 #include <cstdio>
 4 #include <cstdlib>
 5 
 6 int RandomInRange(int start, int end) {    
 7     srand((int)time(NULL));
 8     return start + rand() % (end - start + 1);
 9 }
10 
11 void Swap(int* x, int* y) {
12     int t;
13     t = *x;
14     *x = *y;
15     *y = t;
16 }
17 
18 int Partition(int data[], int length, int start, int end) {
19     if (data == NULL || length < 0 || start < 0 || end >= length)
20         throw new std::exception("Invalid Parameters");
21 
22     int index = RandomInRange(start, end);
23     Swap(&data[index], &data[end]);
24 
25     int small = start - 1;
26     for (index = start; index < end; ++index) {
27         if (data[index] < data[end]) {
28             ++small;
29             if (small != index)
30                 Swap(&data[index], &data[small]);
31         }
32     }
33 
34     ++small;
35     Swap(&data[small], &data[end]);
36 
37     return small;
38 }
39 
40 void QuickSort(int data[], int length, int start, int end) {
41     if (start == end)
42         return;
43 
44     int index = Partition(data, length, start, end);
45 
46     if (index > start)
47         QuickSort(data, length, start, index - 1);
48     if (index < end)
49         QuickSort(data, length, index + 1, end);
50 }
51 
52 void OutputList(int data[], int length)
53 {
54     for (int i = 0; i<length-1; ++i)
55     {
56         printf("%d ", data[i]);
57     }
58     printf("\n");
59 }
60 
61 int main() {
62     int data[9] = { 1,3,7,2,9,6,8,5 };
63 
64     OutputList(data, 9);
65 
66     QuickSort(data, 9, 0, 7);
67 
68     OutputList(data, 9);
69 
70     system("pause");
71     return 0;
72 }

 

posted @ 2016-06-24 16:21  青_阳  阅读(136)  评论(0编辑  收藏  举报