快速排序partation的实现

将数组视为三部分,一部分为<=key,边界为i,另一部分>=key,剩下的为要处理的元素,下标为j。如果a[j]<=x,将i++,同时a[j]和a[i]交换。


#include<stdlib.h>
#include<stdio.h>
void exch(int &a,int &b){//exchange elem 
    int tmp;
    tmp = a;
    a= b;
    b = tmp;
}
int partation(int a[],int p,int q){
    int j;
    int i = p;
    int x = a[p];//set a[p] as key elem
    for(j= p+1;j<=q;j++){//traverse the elem to be deal with
        if(a[j]<=x){
           i++;
           if(i != j)
             exch(a[j],a[i]);
        }
    }
    exch(a[p],a[i]);// at last swap key and the boundry elem of the part which less than the key
    return i;
}
void q_sort(int a[],int p,int q){
    if(p<q){
    int m = partation(a,p,q);
    q_sort(a,p,m-1);
    q_sort(a,m+1,q);
    }
}
int main(){
   int array[] = {4,7,4,2,19,8,7,64,3,2,1,0,9,6,4,7,4,2,1,6,8};
   int array_size = sizeof(array)/sizeof(int);

   q_sort(array,0,array_size-1);
   for(int i =0 ;i<array_size;i++)

        printf("%d ",array[i]);
  return 1;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值