码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序

时间:2018-05-29 15:29:19      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:pre   turn   code   快速   UI   递归   bre   color   排序   

快排也叫挖坊填补法

先选择一个标准值,将它取出,我们把它看做一个坑。

我们选择最低的一位作为标准值。

从后向前遍历,(高指针向低指针遍历)找到比这个标准值小的值就放入坑中,这时就产生了一个新的坑。

再从前向后遍历,(低指针向高指针遍历)找到比标准值大的值则放入坑中,这时产生了一个新的坑。

再从后向前遍历(高指针向低指针遍历)。。。。。

当高低指针相遇的时候,将标准值放入。这时标准值得左边都是比标准值小的,标准值得后面都是比标准值大的。

将左边,和右边看成独立数组,重复以上步骤。(递归实现)

代码:

int  FindStandard(int *arr,int low,int high)
{
    int num = arr[low];
    while(low < high)
    {
        //从后向前找
        while(low < high)
        {
            if(arr[high] < num)
            {
                arr[low] = arr[high];
                break;
            }
            high--;
        }
        //从前向后找
        while(low < high)
        {
            if(arr[low] > num)
            {
                arr[high] = arr[low];
                break;    
            }
            low++;    
        }
    }
    arr[low] = num;
    return low;
}
void QuickSort(int* arr,int low, int high)
{
    if(arr == NULL || low >= high)
        return;
    int Standard = FindStandard(arr,low,high);
    //以标准值为界限分为左半部分和右半部分,再分别重复以上步骤
    QuickSort(arr,low,Standard-1);
    QuickSort(arr,Standard+1,high);
}

从后向前遍历,(高指针向低指针遍历)找到比这个标准值小的值就放入坑中,这时就产生了一个新的坑。

再从填好的坑的下一位向后遍历,(低指针向高指针遍历)找到比标准值大的值则放入坑中,这时产生了一个新的坑。

再从填好的坑的前一位向前遍历。。。。。

当高低指针相遇的时候,将标准值放入。这时标准值得左边都是比标准值小的,标准值得后面都是比标准值大的。

快速排序

标签:pre   turn   code   快速   UI   递归   bre   color   排序   

原文地址:https://www.cnblogs.com/Lune-Qiu/p/9104933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!