python实现冒泡、插入、快速排序三种基础排序算法

一、冒泡排序

# coding=utf-8
# 冒泡排序算法


# 简单实现
def bubble(data):
    for n in range(len(data)-1):
        for i in range(len(data)-1-n):
            if data[i] > data[i+1]:
                data[i], data[i+1] = data[i+1], data[i]


# 自测代码
if __name__ == '__main__':
    values = [23, 45, 2, 67, 34, 9, 86, 39, 52, 73, 19, 98, 27]
    print('原数据列表:', values)
    bubble(values)
    print('冒泡排序后:', values)
  • 冒泡排序:重复走访要排序的数据集合,依次比较每两个相邻的元素,如果其次序错误则交换两数据;重复进行走访对比直到没有相邻数据需要交换为止。
  • 特点: 对数据本身有序性敏感
    在这里插入图片描述

二、插入排序

# coding=utf-8
# 插入排序算法


# 简单实现
def insertion(data):
    for n in range(1, len(data)):
        tmp = data[n]
        for i in range(n, -1, -1):
            if data[i-1] < tmp or i == 0:
                break
            else:
                data[i] = data[i - 1]
        data[i] = tmp


# 自测代码
if __name__ == '__main__':
    values = [23, 45, 2, 67, 34, 9, 86, 39, 52, 73, 19, 98, 27]
    print('原数据列表:', values)
    insertion(values)
    print('插入排序后:', values)


  • 插入排序:将数据插入到已经有序的数据中,从而得到新的有序数据。默认首元素自然有序,取出下一个元素,对已经排序的数据从后向前扫描:若有序数据大于取出数据,则该有序数据后移;若有序数据小于等于取出数据,则在该有序数据后插入取出数据如果所有的有序数据均大于取出数据,则在有序数据头部插入取出数据。取出下一个未排序数据,重复上步骤,直到处理完所有数据为止
  • 特点:不交换只移动,优于冒泡
    在这里插入图片描述

三、快速排序

# coding=utf-8
# 快速排序算法


# 简单实现
def quick(data):
    if len(data) < 2:
        return data
    mark = data[0]
    smaller = [x for x in data if x < mark]
    equal = [x for x in data if x == mark]
    bigger = [x for x in data if x > mark]
    return quick(smaller) + equal + quick(bigger)


# 自测代码
if __name__ == '__main__':
    values = [23, 45, 2, 67, 34, 9, 86, 39, 52, 73, 19, 98, 27]
    print('原数据列表:', values)
    after = quick(values)
    print('快速排序后:', after)


  • 快速排序:首先任意选取一个数据(通常我们选用第一个数)作为关键数据,然后将所有比它小的数据放在其前面,将所有比它大的数据放到其后面,这个过程称为一趟快速排序。通过一趟排序将数据分为两个部分,然后递归对该两个部分重复进行快速排序,已达到所有数据有序。
  • 特点: 如果每次都能均匀分组则排序速度是最快的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来为您介绍这几种排序算法。 1. 冒泡排序:它是一种简单的排序算法,通过不断交换相邻的元素来将序列排序。具体来说,它每次比较相邻的两个元素,如果顺序不对就交换它们的位置。重复这个过程直到所有元素都排好序为止。时间复杂度为 O(n^2)。 2. 直接插入排序:它是一种稳定的排序算法,它每次将一个排序的元素插入到已经排好序的序列中。具体来说,它从第二个元素开始,将其插入到已经排好序的前面的序列中。时间复杂度为 O(n^2)。 3. 折半插入排序:它是一种改进的直接插入排序算法,它通过二分查找的方式来寻找插入位置,从而减少了比较次数。具体来说,它将待排序的元素插入到已经排好序的序列中,但是它是通过二分查找来寻找插入位置的。时间复杂度为 O(n^2)。 4. 简单选择排序:它是一种简单的排序算法,它每次选择一个最小的元素,并将其放到已经排好序的序列的末尾。具体来说,它从第一个元素开始,找到最小的元素并将其放到第一个位置,然后从剩余的元素中找到最小的元素并将其放到第二个位置,以此类推。时间复杂度为 O(n^2)。 5. 快速排序:它是一种高效的排序算法,它通过分治的方式来将序列分成两个子序列,然后对这两个子序列分别进行排序。具体来说,它选择一个基准元素,将序列分成两个子序列,左边的子序列都比基准元素小,右边的子序列都比基准元素大。然后递归地对左右子序列进行快速排序。时间复杂度为 O(nlogn)。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值