冒泡+快排

快排

说起快排的Python实现,首先谈一下,快速排序的思路:

1、取一个参考值放到列表中间,初次排序后,让左侧的值都比他小,右侧的值,都比他大。

2、分别对左侧和右侧的部分递归第1步的操作

实现思路:

  • 两个指针left,right分别指向列表的第一个元素和最后一个元素,然后取一个参考值,默认为第一个列表的第一个元素list[0],称为K
  • 然后left指向的值先和参考值K进行比较,若list[left]小于或等于K值,left就一直向右移动,left+1,直到移动到大于K值的地方,停住
  • right指向的值和参考值K进行比较,若list[right]大于K值,right就一直向左移动,right-1,直到移动到小于K值的地方,停住
  • 此时,left和right若还没有相遇,即left还小于right,则二者指向的值互换
  • 若已经相遇则说明,第一次排序已经完成,将list[right]与list[0]的值进行互换,进行之后的递归
# 方法一


def QuickSort(list, low, high):
if high > low:
# 传入参数,通过Partitions函数,获取k下标值
k = Partitions(list, low, high)
# 递归排序列表k下标左侧的列表
QuickSort(list, low, k - 1)
# 递归排序列表k下标右侧的列表
QuickSort(list, k + 1, high)


def Partitions(list, low, high):
left = low
right = high
# 将最左侧的值赋值给参考值k
k = list[low]
# 当left下标,小于right下标的情况下,此时判断二者移动是否相交,若未相交,则一直循环
while left < right:
# 当left对应的值小于k参考值,就一直向右移动
while list[left] <= k:
left += 1
# 当right对应的值大于k参考值,就一直向左移动
while list[right] > k:
right = right - 1
# 若移动完,二者仍未相遇则交换下标对应的值
if left < right:
list[left], list[right] = list[right], list[left]
# 若移动完,已经相遇,则交换right对应的值和参考值
list[low] = list[right]
list[right] = k
# 返回k值
return right


list_demo = [6, 1, 2, 7, 9, 3, 4, 5, 10, 8]
print(list_demo)
QuickSort(list_demo, 0, 9)
print(list_demo)
鲸落 https://www.cnblogs.com/kunpengv5/

# 方法二:


def quick_sort(alist, start, end):
if start >= end:
return
mid = alist[start]
left = start
right = end
# left与right未重合,就向中间移动
while left < right:
while left < right and alist[right] >= mid:
right -= 1
alist[left] = alist[right]
while left < right and alist[left] < mid:
left += 1 # a_list = [1, 12, 22, 34, 21, 4, 6, 8, 11, 54, 36, 7, 3, 0, 60, 62, 63]
alist[right] = alist[left]
# 从循环退出后,left与right相遇,即left==right
alist[left] = mid
# 对左边部分执行快速排序
quick_sort(alist, start, left-1)
# 对右边部分执行快速排序
quick_sort(alist, left+1, end)


a_list = [1, 12, 22, 34, 21, 4, 6, 8, 11, 54, 36, 7, 3, 0, 60, 62, 63]
quick_sort(a_list, 0, len(a_list) - 1)
print(a_list)

榴莲丿丶

https://www.cnblogs.com/shenzhuang/

冒泡

# 冒泡排序
# 基本思想是:通过无序区中相邻的关键字间的比较和位置交换,让小数逐渐浮上来。


def bubble_sort(alist):
for i in range(len(alist)-1):
for j in range(i+1, len(alist)):
if alist[i] > alist[j]:
alist[i], alist[j] = alist[j], alist[i]
return alist


li = list(map(int, input().split()))
bubble_sort(li)
print(li)

posted on 2019-08-29 16:03  小柒妖-  阅读(161)  评论(0编辑  收藏  举报

导航