算法导论之快速排序

#include <iostream>
using namespace std;
 int PARTITION  ( int *A,int p, int r)
 {
     int x =A[r];
     int i=p-1,a;
     for(int j=p;j<r;j++)
     {
         if(A[j]<=x)
         {
             i++;
             a=A[i];
             A[i]=A[j];
             A[j]=a;
         }
     }
     a=A[i+1];
     A[i+1]=A[r];
     A[r]=a;
     return i+1;
 }
 void QUICKSORT(int * A,int p,int r)
 {
     if(p<r)
     {
        int  q=PARTITION(A,p,r);
         QUICKSORT(A,p,q-1);
         QUICKSORT(A,q+1,r);
     }
 }
 int main()
 {
     int A[]={16,32 ,5, 13,9,12,1,2,11,0};
     QUICKSORT(A,0,10);
     for(int i=0;i<10;i++)
        cout<<"  "<<A[i];

 }

快速排序的i一开始指向p-1,j指向的位置表示在j之前的位置与所选pivot关系已知,在j之后的元素位置未知。

之后j自增,碰到比pivot大的元素不动作。i的作用是i左边的都是比pivot小的,i指向的位置的之前元素必然比pivot小。所以当j遇到比pivot小的元素时,i+1所指向的元素必然比pivot大,此时交换ij位置。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值