快速排序(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)

  时间效率:

  

猜你喜欢

转载自www.cnblogs.com/wyd-blogs/p/11485076.html