- 论坛徽章:
- 0
|
这是算法引论中介绍的快速排序算法:
- QUICKSORT(A,p,r)
- 1 if p < r
- 2 then q <-- PARTITION(A,p,r)
- 3 QUICKSORT(A,p,q)
- 4 QUICKSORT(A,q + 1,r)
- PARTITION(A,p,r)
- 1 x <--- A[p]
- 2 i <--- p - 1
- 3 j <--- r + 1
- 4 while TRUE
- 5 do repeat j <--- j - 1
- 6 until A[j] <= x
- 7 repeat i <--- i + 1
- 8 until A[i] >= x
- 9 if i < j
- 10 then exchange A[i] <---> A[j]
- 11 else return j
复制代码
从代码的PARTITION部分可以看出,每次调用PARTITION,数组A[]中的任意元素至多被交换一次,也就是说整个排序过程中,A[]中的任意元素至多只能交换 n-1 次(n个元素的数组)。我想构造一个某个元素交换了 n-1 次的序列,试了试但没能构造出来。3,1,2 这个太简单除外。也可能这个交换次数的确界不是 n-1? 一时好奇,发出来问问。 |
|