快速排序过程

 快排:8 1 9 3 4 2 5 6(设为数组R[100],开始数字设为left,结束数字设为right)

首先取第一个数字8为哨兵,令 j 指向最右边的数字,i指向最左边的数字,从j开始向左移动寻找比哨兵小的数字,然后i从第二个数字开始开始向右寻找比哨兵大的数字,然后j、i所指的数字互换;

继续j向左移动寻找比哨兵小的数,i继续向右照比哨兵大的数字,然后互换,直到 i 与 j 相遇,把 i 指向的数字与哨兵互换,完成一次快排;第一次快排完成后原来的数字分为两组,左边一组是都比哨兵小的数字,开始为left,结束为i(j)+1;右边一组是都比哨兵大的数字,开始为i(j)-1,结束为right,然后两组分别进行上面的排序。

代码:

void Quick_sort(int R[],int left,int right){
     //查找
     if(left > right)//循环停止条件********
        return;
     int x = R[left];
     int i = left,j = right;
     while(i < j){
          while(i < j && R[j] >= x)
               j--;
          while(i < j && R[i] <= x)//如果j == i,下边交换的数字就不是原来要交换的数字,快排失效
                i++;
          int b = R[i];
          R[i] = R[j],R[j] = b;
     }
     int y =  R[i];
     R[i] = x,R[left] = y;
     //分治(递归)
       Quick_sort(left,i-1);         
       Quick_sort(i+1,right);
 }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值