快速排序(QuickSort)
Posted wyd-blogs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序(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)
时间效率:
以上是关于快速排序(QuickSort)的主要内容,如果未能解决你的问题,请参考以下文章