您的位置:首页 > 编程语言 > Python开发

Python实现快速排序

2018-01-25 21:19 190 查看
"""
快速排序的思路:
numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
1、设keys(又称为监视哨)等于numlist=[0],i等于0,j等于len(numlist)-1,即如下:
numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
|                                     |
keys=6,i=0                                 j
2、(1)、第一次排序的第一趟是拿numlis[j] 和keys 比较,如果numlist[j]<keys,则把numlist[j]
赋给numlist[i],如果numlist[j]>keys,则j向前移一位,即:j -= 1,在例子numlist中,第一次比较
因为keys=6,numlist[j]=6,所以j -= 1,如下所示:
numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
|                                  |
keys=6,i=0                              j
然后继续拿numlist[j]和keys相比,因为numlist[j]=15 > keys,所以 j -= 1,j的位置如下:
numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
|                              |
keys=6,i=0                        j
此时因为numlist[j]=2 < keys , 便进行 赋值 : numlist[i] = numlist[j],完成第一次趟排序,
完成第一次趟排序后,numlist和i,j的位置如下:
numlist = [2, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
|                                  |
i=0                                 j
(2)、第一次排序的第二趟是拿前面开始往后搜索,如果比keys大,则赋值给numlist[j],因为此时
numlist[i]=2<keys,所以i向后移一位,即 i += 1,此时i的位置如下:
numlist = [2, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
|                           |
i=0                          j
因为此时的numlist[i]=8>keys,所以进行 numlist[j]=numlist[i]运算,然后再进行
numlist[i] = keys 的运算,经过第二趟排序后,numlist如下:
num
4000
list = [2, 6, 1, 4, 3, 9, 5, 4, 11, 2, 8, 15, 6]
|                           |
i=0                          j
3、继续重复2的步骤,直到i>=j,跳出第一次排序,并且返回i的值,经过第一次排序后的numlist如下:
numlist = [2, 2, 1, 4, 3, 4, 5, 6, 11, 9, 8, 15, 6]

4、然后进行递归,直到排序完成
"""
def quicky_sort(datalist,left,right):
keys = datalist[left]
i = left
j = right
while i<j:
while i<j and datalist[j]>=keys:
j -= 1
datalist[i] = datalist[j]

while i<j and datalist[i]<=keys:
i += 1
datalist[j]=datalist[i]
datalist[i]=keys
return i

def tempquick(datalist1,left,right):
if left<right:
p = quicky_sort(datalist1,left,right)
#进行递归
tempquick(datalist1,left,p-1)
tempquick(datalist1,p+1,right)
return datalist1

numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
print(tempquick(numlist,0,len(numlist)-1))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: