基础算法之排序算法总结(python版)

本文详细介绍了基础排序算法,包括冒泡排序、选择排序、直接插入排序、希尔排序、快速排序、归并排序和堆排序的思想及复杂度分析。通过对各种排序算法的理解,有助于提升编程能力。
摘要由CSDN通过智能技术生成

 常见排序算法包括有:冒泡,简单选择,直接插入,快排,归并排序,堆排序,希尔排序

目录

冒泡排序

思想:

复杂度分析:

 选择排序

思想:

复杂度分析

直接插入排序

思想:

复杂度分析

希尔排序

思想

复杂度分析

快速排序

思想:

复杂度分析

 快排优化

 归并排序

思想

复杂度分析

归并优化

堆排序

思想

复杂度分析

 总结


冒泡排序

思想:

冒泡排序应该是最耳熟能详的排序算法,它的基本思想是,比较相邻两个数字,将较大的交换至后面,每一轮比较结束,都会将当前比较序列的最大值甩到最后。

复杂度分析:

如果序列初始状态即为升序,那么只需要一轮比较,即n-1次。最坏的情况下是当初始状态为降序,那么需要比较(n-1)+(n-2)+...+1=\frac{n(n-1)}{2}次比较,并且还要做同等次数的交换。因此总的时间复杂度为O(n^2)

# 冒泡排序,相邻两数比较,每次排序最大值沉到最后
def bubblesort(nums):
    n = len(nums)
    changed = True
    for i in range(n):
        # 增加标志位,如果上一次排序没有交换,说明已经排序成功,提前结束
        if changed:
            changed = False
            # 每此排序之后最大值会沉到最后,不参与下一轮比较
            for j in range(0, n - 1 - i):
                if nums[j] > nums[j + 1]:
                    changed = True
                    # 将较大值甩到后面
                    nums[j], nums[j + 1] = nums[j + 1], nums[j]
    return nums

 选择排序

思想:

每次从待排序的数组中选择一个最小的,与数组第一个数字交换。

复杂度分析

与冒泡排序相比,选择排序并没有减少比较次数,并且它不像冒泡排序一样,可以判断是否已经排好序提前结束,所以比较次数永远都是\frac{n(n-1)}{2}次。仅仅是减少了元素移动的次数,最好的时候不需要移动任何元素,最坏的时候也仅需要交换n-1次。因此总的时间复杂度为O(n^2)。但是总体上选择排序性能是要略优于冒泡的。


# 选择排序,每次选择最小的与第一位交换
def selectsort(nums):
    n = len(nums)
    for i in range(n):
        minindex = i
        for j in range(i + 1, n):
            if nums[j] < nums[minindex]:
                minindex = j
        if minindex != i:
            nums[i], nums[minindex] = nums[minindex], nums[i]
    return nums


直接插入排序

思想:

假设已有部分排好序的数组,对每一个新数,在这

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值