##快速排序算法
##基本思想:分治法,将数组分为大于和小于该值的两部分数据,然后在两部分数据中进行递归排序,直到只有一个数据结束
## step1: 取数组第一个元素为key值,设置两个变量,i = 0, j = len(a) - 1
## step2: j从后面开始遍历,遇到小于key的值,则a[i] = a[j]
## step3: i从前面开始遍历,遇到大于key的值,则a[j] = a[i]
##基本思想:分治法,将数组分为大于和小于该值的两部分数据,然后在两部分数据中进行递归排序,直到只有一个数据结束
## step1: 取数组第一个元素为key值,设置两个变量,i = 0, j = len(a) - 1
## step2: j从后面开始遍历,遇到小于key的值,则a[i] = a[j]
## step3: i从前面开始遍历,遇到大于key的值,则a[j] = a[i]
## step4: 对两部分数据递归查找
代码如下:
def quicksort(a, m, n):
key = a[m]
i = m
j = n
while i < j:
while a[j] >= key and i < j:
j -= 1
if i < j:
a[i] = a[j]
i += 1
while a[i] <= key and i < j:
i += 1
if i < j:
a[j] = a[i]
j -= 1
a[i] = key
if m < i - 1:
quicksort(a, m, i - 1)
if n > j + 1:
quicksort(a, j + 1, n)
if __name__ == '__main__':
b = [1, 22, 90, 4, 65, 3, 73, 8]
print(b)
length = len(b)
quicksort(b, 0, length - 1)
print(b)
在网上看到另一个很简单的方法,在这里补充一下吧
def qsort(seq):
if seq==[]:
return []
else:
pivot=seq[0]
lesser=qsort([x for x in seq[1:] if x<pivot])
greater=qsort([x for x in seq[1:] if x>=pivot])
return lesser+[pivot]+greater
if __name__=='__main__':
seq=[5,6,78,9,0,-1,2,3,-65,12]
print(qsort(seq))