排序算法及其python实现

chatgpt生成的一些排序算法

在计算机科学中,有许多用于对数据进行排序的算法。以下是一些常用的排序算法:

  1. 冒泡排序(Bubble Sort): 通过不断比较相邻的元素,并交换顺序不正确的元素,将最大(或最小)元素逐步“冒泡”到正确的位置。时间复杂度为O(n^2)。

  2. 选择排序(Selection Sort): 每次从未排序部分选择一个最小(或最大)元素,放到已排序部分的末尾。时间复杂度为O(n^2)。

  3. 插入排序(Insertion Sort): 将数据分为已排序和未排序两部分,每次从未排序部分取出一个元素,插入到已排序部分的适当位置。时间复杂度为O(n^2)。

  4. 快速排序(Quick Sort): 通过选择一个“基准”元素,将数组分为小于基准的部分和大于基准的部分,然后递归地对这两部分进行排序。时间复杂度通常为O(n log n)。

  5. 归并排序(Merge Sort): 将数组分为两部分,递归地对这两部分进行排序,然后将两部分合并起来。时间复杂度为O(n log n)。

  6. 堆排序(Heap Sort): 构建最大(或最小)堆,然后将堆顶元素与最后一个元素交换,重新构建堆,重复此过程。时间复杂度为O(n log n)。

  7. 希尔排序(Shell Sort): 是一种插入排序的变种,通过将数组分成多个子序列进行排序,逐步减少子序列的间隔,最终进行一次完整的插入排序。时间复杂度取决于间隔序列的选择。

  8. 计数排序(Counting Sort): 适用于一定范围内的整数排序,通过统计每个元素出现的次数,然后根据次数重建排序后的数组。时间复杂度为O(n + k),其中k是数据范围。

  9. 基数排序(Radix Sort): 将数据按照位数进行排序,从低位到高位,每一位使用稳定的排序算法。时间复杂度取决于位数和稳定排序的算法。

  10. 桶排序(Bucket Sort): 将数据划分为一些范围(桶),然后将数据分别放入对应的桶中,再对每个桶内部进行排序。时间复杂度取决于桶的数量和每个桶内部的排序算法。

每个排序算法都有其适用的场景和性能特点,具体选择哪种排序算法取决于数据规模、性能需求以及其他因素。

冒泡排序的python实现

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

选择排序的python实现

def select_sort(li):
    for i in range(len(li)-1):
        min_loc = i
        for j in range(i+1, len(li)):
            if li[min_loc] >= li[j]:
                min_loc = j
        li[i], li[min_loc] = li[min_loc], li[i]

插入排序的python实现

def insert_sort(li: list):          # 插入排序
    for i in range(1, len(li)):         # 遍历无序区,初始时从第二个元素开始为无序区
        insert_loc = i             
        num = li[i]                 # 记录第i个位置的值,防止在后移有序区元素时值被覆盖
        for j in range(0, i):       # 遍历有序区找到插入的位置
            if li[i] < li[j]:
                insert_loc = j
                break
        for k in range(insert_loc, i)[::-1]:        # 倒着将插入位置后的元素后移。倒着移动是防止覆盖
            li[k+1] = li[k]
        li[insert_loc] = num      # 在找到的插入位置插入值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值