用python实现基本的排序

本文深入讲解了冒泡排序、选择排序、插入排序、希尔排序及快速排序等算法的实现原理与代码实现,提供了详细的步骤说明与示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡排序

def sort(alist):

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

    return alist

选择排序

def sort(alist):

    max_index = 0

    for j in range(len(alist)-1):
        for i in range(len(alist)-1-j):
            if alist[max_index] < alist[i]:
                max_index = i
        alist[max_index], alist[len(alist)-1-j] = alist[len(alist)-1-j], alist[max_index]


    return alist

插入排序

def sort(alist):

    for i in range(1, len(alist)):
        while i > 0:
            if alist[i] < alist[i-1]:
                alist[i], alist[i-1] = alist[i-1], alist[i]
                i -= 1
            else:
                break

    return alist

 插入排序的进阶(希尔排序)

def sort(alist):
    gap = len(alist) // 2

    while gap >= 1:
        for i in range(gap, len(alist)):
            while i > 0:
                if alist[i] < alist[i - gap]:
                    alist[i], alist[i - gap] = alist[i - gap], alist[i]
                    i -= gap
                else:
                    break
        gap //= 2

    return alist

原理:

快速排序

  • 将列表中第一个元素设定为基准数字,赋值给mid变量,然后将整个列表中比基准小的数值放在基准的左侧,比基准到的数字放在基准右侧。然后将基准数字左右两侧的序列在根据此方法进行排放。
  • 定义两个指针,low指向最左侧,high指向最右侧
  • 然后对最右侧指针进行向左移动,移动法则是,如果指针指向的数值比基准小,则将指针指向的数字移动到基准数字原始的位置,否则继续移动指针。
  • 如果最右侧指针指向的数值移动到基准位置时,开始移动最左侧指针,将其向右移动,如果该指针指向的数值大于基准则将该数值移动到最右侧指针指向的位置,然后停止移动。
  • 如果左右侧指针重复则,将基准放入左右指针重复的位置,则基准左侧为比其小的数值,右侧为比其大的数值。
def sort(alist,start,end): #[6,1,2,7,9,3,4,5,10,8]

    low = start
    high = end

    while low > high:
        return

    mid = alist[start]

    while low < high:

        while low < high:

            if alist[high] < mid:
                alist[low] = alist[high]
                break
            else:
                high -= 1

        while low < high:

            if alist[low] > mid:
                alist[high] = alist[low]
                break
            else:
                low += 1

        if low == high:
            alist[low] = mid
            break

    sort(alist, start, high-1)  // 这里的high和low一样,都是中间位置的index

    sort(alist, high+1, end)    // 这里的high和low一样,都是中间位置的index

    return alist

alist = [6,1,2,7,9,3,4,5,10,8]

print(sort(alist, 0, len(alist)-1))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值