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

快速排序

时间:2017-11-11 18:49:30      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:pivot   span   元素   turn   array   排序   log   break   ddl   

直接上代码:

void InsertSort(int *array, int n)
{
    int tmp;
    int j;
    for (int p = 1; p < n; p++) {
        tmp = array[p];
        for (j = p; j > 0 && array[j - 1] > tmp; j--) {
            array[j] = array[j - 1];
        }
        array[j] = tmp;
    }
}

int Median3(int *array, int left, int right)
{
    int middle = (left + right) / 2;
    
    if (array[left] > array[middle])
        std::swap(array[left], array[middle]);
    if (array[left] > array[right])
        std::swap(array[left], array[right]);
    if (array[middle] > array[right])
        std::swap(array[middle], array[right]);
    
    std::swap(array[middle], array[right - 1]);
    return array[right - 1];
}

void Qsort(int *array, int left, int right)
{
    if (left + 3 <= right) {
        int pivot = Median3(array, left, right);
        int i = left;
        int j = right - 1;
        for (; ;) {
            while (array[++i] < pivot)
                ;
            while (array[--j] > pivot)
                ;
            if (i < j)
                std::swap(array[i], array[j]);
            else
                break;
        }
        std::swap(array[i], array[right - 1]);
        
        Qsort(array, left, i - 1);
        Qsort(array, i + 1, right);
    } else {
        InsertSort(array + left, right - left + 1);
    }
}

void QuickSort(int *array, int n)
{
    Qsort(array, 0, n - 1);
}

pivot元素的选择,值得研究。

快速排序

标签:pivot   span   元素   turn   array   排序   log   break   ddl   

原文地址:http://www.cnblogs.com/gattaca/p/7819481.html

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