标签:效率 平均情况 情况 元素 信息 最好 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)
时间效率:
标签:效率 平均情况 情况 元素 信息 最好 int -- 一个
原文地址:https://www.cnblogs.com/wyd-blogs/p/11485076.html