快速排序

来源:互联网 发布:ios图片模糊软件 编辑:程序博客网 时间:2024/06/04 00:15

最近在看剑指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

0 0
原创粉丝点击