Python实现排序算法——交换排序

 ̄綄美尐妖づ 提交于 2020-02-28 15:10:12

一、冒泡排序

def bubble_sort(values):
    """冒泡排序"""
    for i in range(len(values) - 1):#冒泡趟数
        flag = False#表示本趟冒泡是否发生交换的标志
        for j in range(len(values) - i - 1):#一趟冒泡过程
            if values[j] > values[j + 1]:#若为逆序
                values[j],values[j + 1]  = values[j + 1],values[j]#交换values[j]和values[j+1]
                flag = True
        if not flag:#本趟遍历后没有发生交换,说明表已经有序
            print(values)
            return
    print(values)

二、快速排序

def quick_sort(values,low,high):
    """快速排序"""
    if low < high:#递归跳出条件
        base = division(values,low,high)#划分
        quick_sort(values,low,base-1)#依次对两个子表进行递归排序
        quick_sort(values,base+1,high)

def division(values,low,high):
    """划分算法,一趟快速排序过程"""
    base = values[low]#将当前表中第一个元素设为枢纽值,对表进行划分
    while low < high:#循环跳出条件
        while low < high and values[high] >=base:
            high -= 1
        values[low] = values[high]#将比枢轴值小的元素移动到左端
        while low < high and values[low] <= base:
            low +=1
        values[high] = values[low]#将比枢轴值大的元素移动到右端
    values[low] = base#枢轴元素存放到最终位置
    return low#返回存放枢轴的最终位置
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!