青少年python系列目录_老程序员115的博客-优快云博客
算法原理:选一个数位基准,将序列分成两个部分,一边全是比它小序列,另一边全是比它大序列。然后再分别对比他小的序列和比再次进行基准分割。依次分割下去,得到一个有序的队列。
原理图示:
算法步骤图示:
以序列首位数字位基准。下标为j的哨兵从右往左出发,找到一个比6小的数,停在该位置
下标为i的哨兵从左往右出发,找到一个比6大的数。
交换两个哨兵的数字。
继续该过程
直到两个哨兵相遇,j哨兵往左移动发现3比6小停了下来,i哨兵往右移动,与j哨兵相遇,说明一轮探测结束,然后将基准移动到哨兵相遇的位置。
此时左边数列均比6小,右边数列均比6大。对左右序列一次进行如上步骤,获得一个有序的数列。
def qsort(l, r): # 快速排序函数
i = l
j = r
mid = a[(l+r)//2] # 将当前续写在中间位置的数定义为分隔数
while i <= j: # 注意不能少了等号
while a[i] < mid: # 在左半部分寻找比中间数大的数
i += 1
while a[j] > mid: # 在右半部分寻找比中间小的数
j -= 1
if i <= j: # 若找到一组与排序目标不一致的数对,则交换他们
temp = a[i]
a[i] = a[j]
a[j] = temp
i += 1 # 继续找
j -= 1
if l < j: # 若未找到两个数的边界,则递归搜索左右区间
qsort(l, j)
if i < r:
qsort(i, r)
a = [49,38,65,97,76,13,27,49]
# [49,38,65,49,76,13,27,97]
qsort(0, len(a)-1) # 调用快速排序函数
print(a) # 打印排序后的结果
csdn文章推荐受影响解决办法10个字10行
csdn文章推荐受影响解决办法10个字10行
csdn文章推荐受影响解决办法10个字10行
csdn文章推荐受影响解决办法10个字10行
csdn文章推荐受影响解决办法10个字10行
csdn文章推荐受影响解决办法10个字10行
csdn文章推荐受影响解决办法10个字10行
csdn文章推荐受影响解决办法10个字10行
csdn文章推荐受影响解决办法10个字10行
csdn文章推荐受影响解决办法10个字10行