快速排序(QuickSort)

 

  • 算法思想

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

  在待排序表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)

  时间效率:

 

 

 

 

  

 

posted @ 2020-03-12 09:01  会吹泡泡的鱼  阅读(219)  评论(0编辑  收藏  举报