随即选取主元的快速排序

 1 #include <iostream>
 2 using namespace std;
 3 #include <stdlib.h>
 4 
 5 #define LEN 12
 6 
 7 int QuickSort(int *arr,int start,int end);
 8 int Sort(int *arr,int start,int end);
 9 int swap(int &a,int &b);
10 
11 int main()
12 {
13     srand(16);
14     int A[LEN] = {13,19,9,5,12,8,7,4,21,2,6,11};
15     QuickSort(A,0,11);
16     for(int i = 0;i < LEN;i++)
17     {
18         cout<<A[i]<<endl;
19     }
20 }
21 
22 int QuickSort(int *arr,int start,int end)
23 {
24     if(start < end)
25     {
26         int i = Sort(arr,start,end);    //以主元i的位置为界限分割成俩个数组
27         QuickSort(arr,start,i -1);      
28         QuickSort(arr,i + 1,end);
29     }
30     return 0;
31 }
32 
33 int Sort(int *arr,int start,int end)
34 {
35     int piv = rand() % (end + 1 - start) + start;   //随机选取主元
36     swap(arr[piv],arr[end]);
37     //i-j的范围为比主元小的值,j-end的范围为比主元大的值
38     int i = start - 1;               
39 
40     for(int k = start; k < end ; k++)   
41     {
42         if(arr[k] <= arr[end])              
43         {
44             i = i+1;
45             swap(arr[i],arr[k]);
46         }
47     }
48     swap(arr[i+1],arr[end]);
49     return i+1;
50 }
51 
52 int swap(int &a,int &b)
53 {
54     int tmp;
55     tmp = a;
56     a = b;
57     b = tmp;
58     return 0;
59 }

 

转载于:https://www.cnblogs.com/oscar1011/p/4056911.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值