快速排序

来源:互联网 发布:单片机连接继电器 编辑:程序博客网 时间:2024/05/21 04:50

快速排序是一种分治算法
快速排序是一种原址排序,因此能节省内存
快速排序最坏时间为theta(n^2)
快速排序平均性能非常好(平均情况时间为theta(nlgn),且其中常数因子很小),因此快速排序通常是最好的排序,而且快速排序很好地适用于虚拟内存环境
随机化快速排序最坏时间为theta(n^2),随机化算法各元素不相同的情况下,期望时间为O(nlgn)
由于子数组都是原址排序的,因此不需要合并操作,只需要分治法中的分解与求解步骤
快速排序的分解步骤是最关键的步骤;
注意:划分的两个子数组,其中可能存在空数组
quicksort
1. if p < r
2. q = partition(A, p, r)
3. quicksort(A, p, q - 1)
4. quicksort(A, q + 1, r)

数组划分算法 –用于对数组进行原址重排序(只需8步)
partition(A, p, r)
1. x = A[r]
2. i = p - 1
3. for j = p to r-1
4. if A[j] ≤ x
5. i = i + 1;
6. exchange A[i] with A[j]
7. exchange A[i + 1] with A[r]
8. return i + 1
其中x为主元,主元用于划分数组
注意分治法中,A[p..r]也是子数组,而非整个数组

原创粉丝点击