快速排序(Quicksort) 在平均状况下,排序n个项目要O(nlogn)次比较。在最坏状况下则需要O(n2)次比较,但这种状况并不常见。它在排序效率同为O(nlogn)的几种排序方法中效率最高,因此经常被采用。
算法思想
设数组a中存放了n个数据元素,low为数组的低端下标,high为数组的高端下标,从数组a中任取一个元素(通常取a[low])作为标准,调整数组a中各个元素的位置,使排在标准元素前面的元素的关键字均小于标准元素的关键字,排在标准元素后面的元素的关键字均大于或等于标准元素的关键字。(即标准元素被放在了未来排好序的数组中该标准元素应在的位置)然后,对这两个字数组中的元素分别再进行方法类同的递归快速排序。递归算法的结束条件是high <= low,即上界下表小于或等于下界下标。
对快速排序 (挖坑填数)进行形象化总结:
- i = L; j = R; 将基准数(pivot)挖出形成第一个坑a[i]。
- j– 由后向前找比它小的数,找到后挖出此数填入前一个坑a[i]中。
- i++ 由前向后找比它大的数,找到后也挖出此数填入前一个坑a[j]中。
- 再重复之行2,3二步,直到i == j,将基准数(pivot)填入a[i]中。
- 递归调用上述步骤,直到数组中全部元素从小到大排序完成。
|
|