数据的排序方法

本文介绍了六种数据排序算法:冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序,包括各自的时间复杂度、空间复杂度和稳定性。其中,快速排序和归并排序具有O(nlogn)的时间复杂度,而堆排序可以用于解决topK问题。Python中可以通过内置的heapq库实现堆排序操作。
摘要由CSDN通过智能技术生成

1. 冒泡排序:时间复杂度O(n^2),空间复杂度O(1),稳定

思路:(1)列表每两个相邻的数,如果前面比后面的大,则交换两个数的位置
           (2)一趟排序完成后,别找出当前列表中的最大数,并放在当前列表的末尾

def bubble_sort(list_num):
    n = len(list_num)
    for i in range(n-1):      # i 代表第几趟,每排完一趟后,列表后面的有序数组便增加一个数
        flag_change = False     # 如果某一趟执行完后没有出现元素交换的现象,说明列表已经有序,可直接跳出循环
        for j in range(n-1-i):        # j代表列表前面还有几个无序数
            if list_num[j] > list_num[j+1]:
                list_num[j],list_num[j+1] = list_num[j+1],list_num[j]
                flag_change = True
        if not flag_change:
            break
    return list_num

2. 选择排序:时间复杂度O(n^2),空间复杂度O(1),不稳定

思路:(1)一趟排序记录最小的数,放到第一个位置
           (2)再一趟排序记录最小的数,放到第二个位置
           (3)。。。。。。

def select_sort(list_num):
    n = len(list_num)
    for i in range(n-1):      # i代表第几趟
        min_index = i
        for j in range(i+1,n):      # j代表从列表后面的无序数组中选择一个最小数
            if list_num[j] < list_num[min_index]:
                min_index = j
        list_num[i],list_num[min_index] = list_num[min_index],list_num[i]
    return list_num

3. 插入排序:时间复杂度O(n^2),空间复杂度O(1),稳定

思路:(1)初始时手里(有序区)只有一张牌(列表的第一个元素)
           (2)每次从无序区摸一张牌(剩余列表的第一个元素)插入手里(有序区)的正确位置

d
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值