码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序

时间:2018-06-19 22:47:54      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:i+1   计算   opened   快速排序   等于   info   技术   .com   rand   

快速排序:通过一趟排序把数组分成两个部分,其中一部分的值全大于另一部分的值,再分别对这两部分排序

 技术分享图片

技术分享图片

技术分享图片

技术分享图片
 1 #对A[p,r]进行快速排序
 2 def quicksort(A, p, r):
 3     if p < r:
 4         q = partition(A, p, r)#计算分块下标q
 5         quicksort(A, p, q - 1)#对前面进行快速排序
 6         quicksort(A, q + 1, r)#对后面进行快速排序
 7 
 8 #计算分块下标,
 9 def partition(A, p, r):
10     x = A[r]#主元
11     i = p - 1
12     for j in range(p, r):
13         #把每个元素和主元比较,
14         #如果比主元大或等于,不做操作
15         if A[j] < x:#如果比较的元素比主元小,
16             i += 1#把记录的最后一个比主元小的元素的坐标+1
17             A[i],A[j]=A[j],A[i]# 把当前的元素A【j】和A【i】交换
18     #通过A[r]改变A【i+1】
19     A[r] = A[i + 1]
20     A[i + 1] = x
21     return i + 1
22 
23 A=[2,8,7,1,3,5,6,4]
24 print(partition(A, 0, 7))
25 print(A)
26 quicksort(A,0,7)
27 print(A)
28 ----------------------------
29 3
30 [2, 1, 3, 4, 7, 5, 6, 8]
31 [1, 2, 3, 4, 5, 6, 7, 8]
快速排序

 随机选取主元:

技术分享图片

技术分享图片
 1 #计算分块下标,
 2 def partition(A, p, r):
 3     x = A[r]#主元
 4     i = p - 1
 5     for j in range(p, r):
 6         #把每个元素和主元比较,
 7         #如果比主元大或等于,不做操作
 8         if A[j] < x:#如果比较的元素比主元小,
 9             i += 1#把记录的最后一个比主元小的元素的坐标+1
10             A[i],A[j]=A[j],A[i]# 把当前的元素A【j】和A【i】交换
11     #通过A[r]改变A【i+1】
12     A[r] = A[i + 1]
13     A[i + 1] = x
14     return i + 1
15 
16 import random
17 
18 def randomized_quicksort(A, p, r):
19     if p < r:
20         q = randomized_partition(A, p, r)
21         randomized_quicksort(A, p, q - 1)
22         randomized_quicksort(A, q + 1, r)
23 
24 def randomized_partition(A, p, r):
25     i = random.randint(p, r)
26     A[i],A[r-1]=A[r-1],A[i]
27     return partition(A,p,r)
28 
29 A=[2,8,7,1,3,5,6,4]
30 print(randomized_partition(A, 0, 7))
31 print(A)
32 randomized_quicksort(A,0,7)
33 print(A)
34 -----------------------------------------
35 3
36 [2, 3, 1, 4, 8, 5, 7, 6]
37 [1, 2, 3, 4, 5, 6, 7, 8]
随机主元快速排序

 

快速排序

标签:i+1   计算   opened   快速排序   等于   info   技术   .com   rand   

原文地址:https://www.cnblogs.com/yu-liang/p/9201143.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!