摘自《C程序设计语言》的一种简单高效的qsort

void qsort(int left,int right)/* 对v[left]到v[right]的区间进行排序 */
{
     int i,last;/* last是本次分区的分界线 */
     if (left>=right)
     {
         return;/* left>=right则无意义 */
     }
     last=left;/* 先把边界设到最左边 */
     swap(left,(left+right)/2);/* 把当作基准,放到最左边 */
/* 此时v={7,9,4,3,1,2,5,8,6,0},基准数是7,last是1 */
     for (i=left+1;i<=right;i++)/* 从第二个元素开始,向后遍历整个区间 */
     {
         if (v[i]<v[left])/* v[left]是基准数,v[i]是与它比较的数 */
         {
             swap(i,++last);/* 把v[i]与自增1后的v[last]交换
                                         也就是把边界扩充到i */
         }
     }
/* 到这里,数组v变成了:{7,4,3,1,2,5,6,0,9,8} 蓝:7 绿:小于7 黄:大于7*/
     swap(left,last);/* 交换基准和边界 */
/* 通过上一步的交换,数组变成了:{0,4,3,1,2,5,6,7,9,8} */
/* 比7小的在左边,比7大的在右边,7在中间,下标为last */
     qsort(left,last-1);/* 数组被last分成两半,左边比较v[left]到v[last-1] */
     qsort(last+1,right);/* 右边比较v[last+1]到v[right],递归地执行下去 */
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值