1、基本思路
快速排序算法的基本思想总结如下:
(1)先从数列中取出一个数作为基准数。
(2)以这个数为基准,将比其大的数全都放到他的右边,小于或等于它的数全放到他的左边
(3)再对左右区间重复(1)(2)步的操作,直到各个区间中只有一个数。
简单形象地总结起来就是: 挖坑填数 + 分治法
2、简单示例
下面,我们给出快排算法的一个简单示例。数组如下:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
72 | 6 | 57 | 88 | 60 | 42 | 83 | 73 | 48 | 85 |
我们取区间的第一个数作为基准数,最初设置 i = 0, j = 9; temp = a[i] = 72,相当于在a[0]位置挖了一个坑。
然后从j开始(基准数为最左边,则要从最右边开始查找)向前查找,找到一个小于等于temp的数。当j=8时,符合条件。
因此,把a[8]填入到a[0]那个坑中,然后将a[8]空出来。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
48 | 6 | 57 | 88 | 60 | 42 | 83 | 73 | 85 |
之后i向前查找,找到比a[0]大的数a[3],将a[3]填入到a[8]中,又将a[3]空出来。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
48 | 6 | 57 | 60 | 42 | 83 | 73 | 88 | 85 |
一直重复上述操作,直到i=j=5时,停止,并且将temp填入到a[5]中。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
48 | 6 | 57 | 42 | 60 | 72 | 83 | 73 | 88 | 85 |
3、代码(Python)
def quick_sort(data, left, right):
if left < right:
i, j = left, right
temp = data[left]
while(i<j):
while(i<j and data[j] >= temp):
j--
data[i] = data[j]
while(i<j and data[i] <= temp):
i++
data[j] = data[i]
data[i] = temp
quick_sort(data, left, i-1)
quick_sort(data, i+1, right)