基本排序算法

本文详细介绍了五种经典的排序算法:冒泡排序、选择排序、插入排序、快速排序和希尔排序,并展示了每种算法的具体实现过程。此外,还介绍了一种高效的归并排序算法及其递归分治的思想。

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

"""冒泡排序"""
def Bubble_sort(li):
        for j in range(len(li)-1, 0, -1):
            for i in range(j):
                if li[i] > li[j]:
                    li[i], li[j] = li[j], li[i]
        print(li)
if __name__ == '__main__':

    li = [54, 26, 93, 17, 77, 31, 44, 55, 20]
    # Bubble_sort(li)
"""选择排序"""


def select_sort(t):
    for i in range(len(t)):
        min_index = i
        for j in range(i+1,len(t)):
            if t[j] < alist[min_index]:
                min_index = j
        if min_index != i:
            t[i], t[min_index] = t[min_index], t[i]
    print(t)

if __name__ == '__main__':
    alist = [54, 226, 93, 17, 77, 31, 44, 55, 20]
    select_sort(alist)
"""插入排序  就是将数据比较出来的重新插入"""
import time
def insert_sort(t):
    """从第二个数开始,和第一个比较"""
    for i in range(1, len(t)):
        for j in range(i, 0, -1):
            if t[j] < t[j-1]:
                t[j-1], t[j] = t[j], t[j-1]
    print(t)
if __name__ == '__main__':
    alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
    insert_sort(alist)
def Qucik_sort(t,start,end):

    low = start
    high = end
    mid = t[start]
    """指定停止条件"""
    if low >= high:
        return
    """第一个位置已经空出来了,所以可以存放数据"""
    while low < high:
        """这个是将比mid大的值放在左边"""
        while low < high and t[high] > mid:
            """此时应该将最后一个位置的游标向前移一个位置"""
            high -= 1
        t[low] = t[high]
        """这个是将比mid小的值放在右边,已经空出来的位置"""
        while low < high and t[low] <= mid:
            low += 1
        t[high] = t[low]
    """如果重合了,就将mid的值赋值给t[low]"""
    t[low] = mid
    """此时如果按照mid已经分为了两个部分,开始递归"""
    Qucik_sort(t, start, low-1)
    Qucik_sort(t, low+1, end)


if __name__ == '__main__':
    alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
    Qucik_sort(alist, 0, len(alist)-1)
    print(alist)
"""希尔排序"""
def shell_sort(t):
    """获取长度 分组"""
    n = len(t)
    gap = n // 2
    while gap > 0:
        for i in range(gap, n):
            j = i
            while j >= gap and t[j] < t[j-gap]:
                t[j-gap], t[j] = t[j], t[j-gap]
                j -= gap
        """得到新的步长"""
        gap = gap // 2

if __name__ == '__main__':
    a_list = [54, 26, 93, 17, 77, 31, 44, 55, 20]
    shell_sort(a_list)
    print(a_list)
"""归并排序"""
def merge(left, right):
    """设定下标, l,r"""
    l = 0
    r = 0
    result = []
    while l < len(left) and r < len(right):
        if left[l] > right[r]:
            result.append(right[r])
            r += 1
        else:
            result.append(left[l])
            l += 1
    """如果,还有剩下的,就要将剩下的直接放进result中"""
    result += left[l:]
    result += right[r:]
    return result


def merge_sort(t):
    if len(t) <= 1:
        return t
    """分组"""
    num = len(t)//2
    left = merge_sort(t[:num])
    right = merge_sort(t[num:])
    return merge(left, right)


if __name__ == '__main__':
    alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
    sorted_alist = merge_sort(alist)
    print(sorted_alist)

"""二分查找"""
def binary_search(item,alist):
    if len(alist) ==0:
        return False
    mid_point = len(alist)//2
    if alist[mid_point] == item:
        return True
    if alist[mid_point] >item:
        return binary_search(item,alist[:mid_point])
    else:
        return binary_search(item,alist[mid_point+1:])
if __name__ == '__main__':
    testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42]
    print(binary_search(13,testlist))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值