快速排序

最近在看剑指offer,有几道题惹我无限遐想,快排真是个神奇的算法。特来总结以下几道题。先来回忆快排排序,相信很多人已经很熟悉了。
快速排序的基本思想是:选定一个初始值对数组进行划分,左边数组都小于初始值右边都答大于初始值。然后继续对左右子数组继续划分,已达到整体对数组排序的目的。

  我们先来实现对数组 的划分:目的很简单选定一个中间值,左右划分,,返回枢纽值下标。代码如下。

int partition(data*data,int low,int high)
{
int pivotkey=data[0];

while(low<high)
{
    while(low<high&&data[high]>=pivotkey)
    high--;
    swap(data,low,high);
    while(low<high&&data[low]<=pivotkey)
    low++;
    swap(data,low,high);
}

return low;

}

算法思想很简单,low,high分别指向数组的起点和终点,如果high定位的值比pivotkey大 high指针前移,直到出现不满足条件的值,此时交换 low和high 定位的值。同理low指针也同样的步骤 。直到low==high,此时结束循环 返回 low的下标或high的下标。

下边得出快速排序的递归算法。

void qsort(data*data,int low,int high)
{
int pivot;
if(low

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值