教主童磨的无限城编程课

大家好,我是童磨,对,就是你们的万世极乐教教主,今天不吃人,来讨论一下算法。
前情提要
自从在无限城和鬼杀队打输了之后,无惨大人一气不打处来…
咳咳,
切入正题,我们今天来讲排序。
一、时间复杂度
学排序之前要先知道时间复杂度是什么:
算法的时间复杂度是指算法执行过程中所需要的基本运算次数,用于定性描述算法运行时间随输入规模增长的变化规律 。它不是具体的物理执行时间,而是衡量算法效率的理论指标,关注输入规模 nn 趋向无穷大时的渐进表现 。‌
二、选择排序和冒泡排序
选择排序‌和‌冒泡排序‌是两种基础的排序算法,均属于‌比较类排序‌,时间复杂度均为 ‌O(n²),适用于小规模数据或教学演示。

1.冒泡排序

  • 基本思想‌:重复遍历待排序数组,依次比较‌相邻元素‌,若顺序错误(如前大于后)则交换,每轮遍历会将当前未排序部分的‌最大值“冒泡”到末尾‌。

  • 关键特点‌:
    1> 每轮最多交换 n−1 次;
    2>可通过设置标志位优化:若某轮无交换,说明已有序,可提前终止;
    3> 是‌稳定排序‌(相等元素相对位置不变);
    4> 原地排序,空间复杂度为O(1)。
    2.选择排序

  • 基本思想‌:每轮从未排序部分中‌找出最小(或最大)元素‌,将其与未排序部分的‌第一个元素交换‌,从而逐步扩大已排序区域。

  • 关键特点‌:
    1> 每轮‌只交换一次‌(即使最小值已在首位);
    2> ‌不稳定排序‌(相同元素可能因交换改变相对位置);
    3> 时间复杂度恒为 O(n²),无论数据是否有序;
    4> 原地排序,空间复杂度为 ‌**O(1)**‌。
    三、桶排序
    1‌.桶排序
    桶排序是一种基于分治思想的‌非比较型排序算法,适用于待排序数据‌均匀分布在某个范围内的场景。其核心思想是将数据分配到有限数量的“桶”中,对每个桶单独排序,最后按顺序合并所有桶中的元素,得到最终有序序列。

核心原理

  1. 设置桶的数量与范围‌:根据输入数据的最小值、最大值及分布特性,确定桶的数量 mm 和每个桶覆盖的值区间。
  2. 元素分配‌:遍历待排序数组,将每个元素通过映射函数(如 index=⌊(x−min⁡)×m/(max⁡−min⁡)⌋index=⌊(x−min)×m/(max−min)⌋)分配到对应桶中。
  3. 桶内排序‌:对每个非空桶中的元素使用其他排序算法(如插入排序、快速排序等)进行排序。
  4. 合并结果‌:按桶的顺序依次取出所有元素,拼接成最终有序数组。

好,这节课就讲到这里,下节课我们讲sort排序。
下课!

(本蒟蒻第一次写课程,大佬们有建议麻烦提一提)

3 个赞

报告,没听懂,教主

1 个赞

你真写!

2 个赞

纯手打

2 个赞

哪里没听懂

1 个赞

育才丙校滕鸿运

1 个赞

到!!!!!!!!!!!!!

棒棒都 :upside_down_face:

教主,插入呢

插入?

1 个赞

-_-,hyw

等一下,你回老帖!

@钱雨辰
举报了

行,到时候关帖