快速排序

Posted yu-liang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序相关的知识,希望对你有一定的参考价值。

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

 技术分享图片

技术分享图片

技术分享图片

技术分享图片
 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]
随机主元快速排序

 

以上是关于快速排序的主要内容,如果未能解决你的问题,请参考以下文章

算法排序之堆排序

前端开发工具vscode如何快速生成代码片段

前端开发工具vscode如何快速生成代码片段

如何使用sublime代码片段快速输入PHP头部版本声明

代码片段如何使用CSS来快速定义多彩光标

vs2003:快速片段工具