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

快速排序(QuickSort)

时间:2020-03-12 09:56:00      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:效率   平均情况   情况   元素   信息   最好   int   --   一个   

 

  • 算法思想

  快速排序是基于冒泡排序的改进,是基于分治思想

  在待排序表L[1...n]中选取一个元素(base)作为基准,一次排序后将排序表划分两个部分L[1...k-1]和L[k+1...n],其中L[1...k-1]中的元素小于base,L[k+1...n]中的元素大于base,然后将base放到L[k]的位置上,这个过程称为一趟快速排序

  递归两个子表,不断重复,直至剩一个元素或空为止。

重点:划分、过程特征

  • 代码实现

  划分,递归:

void QuickSort(int arr[] ,int low, int high)
{
    if(low < high)
    {
        int base = partition(arr,low,high);//划分
        QuickSort(arr, low, base-1);//递归排序
        QuickSort(arr, base+1, high);
    }
}

  一次快速排序:

int partition(int arr[], int low, int high)
{
    int a = arr[low];
    while(low < high)
    {
        while(low < high && arr[high] >= a)
            --high;
        arr[low] = arr[high];
        while(low < high && arr[low] <= a)
            ++low;
        arr[high] = arr[low];
    }
    arr[low] = a;
    return low;
}

 

  • 效率分析

  空间效率:

  需要借助递归栈来保存每层递归信息。

  最好情况:O(log2(n+1))

  最坏情况:O(n)

  平均情况:O(log2n)

  时间效率:

 

 

 

 

  

 

快速排序(QuickSort)

标签:效率   平均情况   情况   元素   信息   最好   int   --   一个   

原文地址:https://www.cnblogs.com/wyd-blogs/p/11485076.html

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