经典排序之 快速排序

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

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

 

算法实现:

 

 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 }

 

转载于:https://www.cnblogs.com/dormant/p/5317000.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值