经典排序之 快速排序

想利用这一两天复习一下几个经典的排序算法,今天先来看一下快速排序:

  我们知道快速排序的思想是:先找到一个枢轴,然后进行分块,将其中元素比枢轴小的元素放到枢轴左边,将比他大的放到他的右边,这样我们就完成了一遍基本排序。我们确定了一个数字在排好序的位置;之后利用递归再将枢轴左边的数据分块,将右边的数据分块即可

 

算法实现:

 

 1 #include<iostream>
 2 using namespace std;
 3 
 4 void swap( int &m, int &n){
 5     int temp = m;
 6     m = n;
 7     n = temp;
 8 }
 9 
10 int Partition(int *data, int begin, int end){                                //找到枢轴,然后将左右的数据分开
11     
12     if(data == NULL || begin < 0 || end < 0){
13         cout<<"the invalid array"<<endl;
14     }
15     
16     int key = data[begin];
17     int pos = begin;
18     
19     for(int index = begin + 1; index < end; index++){
20         if(data[index] <= key){
21             ++pos;
22             swap(data[pos], data[index]);
23         }
24     }
25     
26     swap(data[begin], data[pos]);
27     return pos;
28 } 
29 
30 void QuickSort(int *data, int begin, int end){                           //递归实现
31     if(begin == end){
32         return;
33     }
34     
35     int index = Partition(data, begin, end);
36     if(index > begin){
37         QuickSort(data, begin, index - 1);
38     }
39     if(end > index){
40         QuickSort(data, index + 1, end);
41     }
42 }
43 
44 int main(){
45     int num[] = {12, 3, 5, 9, 13, 0, 78, 11, 99, 23, 34, 8};                       //测试程序可行性
46     int len = sizeof(num) / sizeof(int);
47     
48     QuickSort(num, 0, len);
49     for(int i = 0; i < len; i++){
50         cout<<num[i]<<' ';
51     }
52     
53     return 0;
54 }

 

posted @ 2016-03-24 20:20  Dormant  阅读(279)  评论(0编辑  收藏  举报