数据结构与算法之排序: 冒泡排序 (Ts, Py, Go版)

银河麒麟V10开机卡Logo?别慌,手把手教你进单用户模式修复(附详细命令) 本文详细解析银河麒麟V10操作系统启动时卡Logo的故障原因,并提供进入单用户模式的完整解决方案。通过GRUB引导菜单修改启动参数,执行文件系统检查、图形服务修复等关键命令,帮助用户快速恢复系统正常运行,适用于运维人员和普通用户应对紧急启动问题。 阅读详情

排序

  • 排序:把某个乱序的数组变成升序或降序的数组 (这里用数组来做举例)

冒泡排序

  • 该排序属于 贪心 策略
  • 关注的是局部,是一种苟且的东西
  • 冒泡排序最简单,性能不好,工作中用不到
  • 思路
    • 比较所有相邻元素,如果第一个比第二个大,则交换他们
    • 一轮下来,可以保证最后一个数是最大的
    • 执行n-1轮就可以完成排序了
    • 我们可以看到每一轮循环是不一样的,执行区间越来越短
    • 冒泡排序是一种贪心策略
  • 动画示例:visualgo.net/zh/sorting

Typescript 版算法实现


1 )version 1 初始版本

function bubbleSort(nums: number[]) {
  const len :number = nums.length;
  for(let i: number = 0; i < len; i++) {
      for(let j: number = 0; j < len - 1 - i; j++) {
          if(nums[j] > nums[j + 1]) {
              const tmp = nums[j];
              nums[j] = nums[j + 1];
              nums[j + 1] = tmp;
          }
      }
  }
}

const list: number[] = [5, 4, 3, 2, 1];
bubbleSort(list);
console.log(list); // [1, 2, 3, 4, 5]

2 ) version 2 ES6 做两数交换 优化版

function bubbleSort(nums: number[]) {
  const len :number = nums.length;
  for(let i: number = 0; i < len; i++) {
      for(let j: number = 0; j < len - 1 - i; j++) {
          if(nums[j] > nums[j + 1]) {
            [nums[j], nums[j + 1]] = [nums[j + 1], nums[j]];
          }
      }
  }
}

const list: number[] = [5, 4, 3, 2, 1];
bubbleSort(list);
console.log(list); // [1, 2, 3, 4, 5]

3 ) version 3 冒泡排序,提前终止版

function bubbleSort(nums: number[]) {
    let len: number = nums.length;
    let sorted: boolean = false; // 哨兵变量
    while(!sorted) {
        sorted = true; // 提前终止标识
        for(let i: number = 0; i < len - 1; i++) {
            if(nums[i] > nums[i + 1]) {
                [nums[i], nums[i + 1]] = [nums[i + 1], nums[i]];
                sorted = false;
            }
        }
        // 如果经过上面一轮 sorted仍为true,没有变为false, 说明已经整体已经有序,可以提前终止了
        len --;
    }
}

const list: number[] = [5, 4, 3, 2, 1];
bubbleSort(list);
console.log(list); // [1, 2, 3, 4, 5]

4 )version 4 冒泡排序,跳跃版

function bubbleSort(nums: number[]) {
    const len: number = nums.length;
    let k: number = len - 1; // 跳跃标识
    let last: number = 0; // 内层循环标识
    let i: number = 0;

    // 第一层循环表示经过n-1趟扫描即可,每比较一趟,问题规模缩小1级,第一层循环次数必须不变 n-1 次
    while(i < len - 1) {
        // 第二层循环表示每一趟进行两两逐个比较,找到最大的元素
        for(let j: number = 0; j < k; ++j) {
            // 当前元素和后一个元素进行比较,若逆序
            if(nums[j] > nums[j+1]) {
                // 则交换
                [nums[j], nums[j + 1]] = [nums[j  +1], nums[j]];
                // 更新交换的位置
                last = j;
            }
        }
        // 在一层循环之后跳跃到最后交换的那个地方,这样的话,在k的位置,后面如果是有序,就可以直接跳过了
        k = last;
        ++i;
    }
}

const list: number[] = [5, 4, 3, 2, 1];
bubbleSort(list);
console.log(list); // [1, 2, 3, 4, 5]

5 )version 5 冒泡排序,提前终止+跳跃版

function bubbleSort(nums: number[]) {
    const len: number = nums.length;
    let k: number = len - 1; // 跳跃标识
    let last: number = 0; // 内层循环标识
    let i: number = 0; // 最外层循环标识
    let sorted: boolean = false; // 哨兵变量

    // 第一层循环表示经过n-1趟扫描即可,每比较一趟,问题规模缩小1级,第一层循环次数必须不变 n-1 次
    while(i < len - 1 && !sorted) {
        sorted = true;
        // 第二层循环表示每一趟进行两两逐个比较,找到最大的元素
        for(let j: number = 0; j < k; ++ j) {
            // 当前元素和后一个元素进行比较,若逆序
            if(nums[j] > nums[j + 1]) {
                // 则交换
                [nums[j], nums[j+1]] = [nums[j+1], nums[j]];
                // 更新交换的位置
                last = j;
                sorted = false;
            }
        }
        // 在一层循环之后跳跃到最后交换的那个地方,这样的话,在k的位置,后面如果是有序,就可以直接跳过了
        k = last;
        ++i;
    }
}

const list: number[] = [5, 4, 3, 2, 1];
bubbleSort(list);
console.log(list); // [1, 2, 3, 4, 5]

总结

  • 时间复杂度:O(n2n^2n2)
    • 两个嵌套循环
  • 该算法通过两两比较盯住当前最大的元素,逐渐将其移动到最后,继而一次有序,逐次比较达到整个序列完全有序
  • 不变性:经k趟扫描交换后,最大的k个元素必然就位
  • 单调性:经k趟扫描交换后,问题规模缩减至n-k
  • 正确性:经至多n趟扫描后,算法必然终止,且能给出正确解答
  • 它的核心思想是自左至右,逐一检查各对相邻元素,若有逆序,则交换
  • 这个算法其实只需要经过n-1趟比较就足够了, 有改进的空间
  • 如果某一趟比较后整体已经有序了,就没有必要继续比较到n-1趟了,即提前终止版
  • 也许一个算法的思想在一开始是基于很low的策略,比如greedy
  • 当基于这个greedy的算法不断做优化, 也能表现的非常好
  • 一共有4个版本的写法(上面 1,2是一种,所以是4种)

Python3 版算法实现


1 ) 方案1

def bubble_sort_v1(nums: list) -> None:
    length = len(nums)
    for i in range(length):
        for j in range(length - 1 - i):
            if nums[j] > nums[j + 1]:
                tmp = nums[j]
                nums[j] = nums[j + 1]
                nums[j + 1] = tmp

# 示例用法
if __name__ == "__main__":
    list_ = [5, 4, 3, 2, 1]
    bubble_sort_v1(list_)
    print(list_)  # 输出: [1, 2, 3, 4, 5]

2 ) 方案2

def bubble_sort_v2(nums: list) -> None:
    length = len(nums)
    for i in range(length):
        for j in range(length - 1 - i):
            if nums[j] > nums[j + 1]:
                nums[j], nums[j + 1] = nums[j + 1], nums[j]

# 示例用法
if __name__ == "__main__":
    list_ = [5, 4, 3, 2, 1]
    bubble_sort_v2(list_)
    print(list_)  # 输出: [1, 2, 3, 4, 5]

3 ) 方案3

def bubble_sort_v3(nums: list) -> None:
    length = len(nums)
    sorted_ = False  # 哨兵变量
    while not sorted_:
        sorted_ = True  # 提前终止标识
        for i in range(length - 1):
            if nums[i] > nums[i + 1]:
                nums[i], nums[i + 1] = nums[i + 1], nums[i]
                sorted_ = False
        length -= 1

# 示例用法
if __name__ == "__main__":
    list_ = [5, 4, 3, 2, 1]
    bubble_sort_v3(list_)
    print(list_)  # 输出: [1, 2, 3, 4, 5]

4 ) 方案4

def bubble_sort_v4(nums: list) -> None:
    length = len(nums)
    k = length - 1  # 跳跃标识
    last = 0  # 内层循环标识
    i = 0  # 最外层循环标识

    while i < length - 1:
        for j in range(k):
            if nums[j] > nums[j + 1]:
                nums[j], nums[j + 1] = nums[j + 1], nums[j]
                last = j
        k = last
        i += 1

# 示例用法
if __name__ == "__main__":
    list_ = [5, 4, 3, 2, 1]
    bubble_sort_v4(list_)
    print(list_)  # 输出: [1, 2, 3, 4, 5]

5 ) 方案5

def bubble_sort_v5(nums: list) -> None:
    length = len(nums)
    k = length - 1  # 跳跃标识
    last = 0  # 内层循环标识
    i = 0  # 最外层循环标识
    sorted_ = False  # 哨兵变量

    while i < length - 1 and not sorted_:
        sorted_ = True
        for j in range(k):
            if nums[j] > nums[j + 1]:
                nums[j], nums[j + 1] = nums[j + 1], nums[j]
                last = j
                sorted_ = False
        k = last
        i += 1

# 示例用法
if __name__ == "__main__":
    list_ = [5, 4, 3, 2, 1]
    bubble_sort_v5(list_)
    print(list_)  # 输出: [1, 2, 3, 4, 5]

Golang 版算法实现


1 ) 方案1

package main

import (
	"fmt"
)

func bubbleSortV1(nums []int) {
	length := len(nums)
	for i := 0; i < length; i++ {
		for j := 0; j < length-1-i; j++ {
			if nums[j] > nums[j+1] {
				tmp := nums[j]
				nums[j] = nums[j+1]
				nums[j+1] = tmp
			}
		}
	}
}

func main() {
	list := []int{5, 4, 3, 2, 1}
	bubbleSortV1(list)
	fmt.Println(list) // 输出: [1, 2, 3, 4, 5]
}

2 ) 方案2

package main

import (
	"fmt"
)

func bubbleSortV2(nums []int) {
	length := len(nums)
	for i := 0; i < length; i++ {
		for j := 0; j < length-1-i; j++ {
			if nums[j] > nums[j+1] {
				nums[j], nums[j+1] = nums[j+1], nums[j]
			}
		}
	}
}

func main() {
	list := []int{5, 4, 3, 2, 1}
	bubbleSortV2(list)
	fmt.Println(list) // 输出: [1, 2, 3, 4, 5]
}

3 ) 方案3

package main

import (
	"fmt"
)

func bubbleSortV3(nums []int) {
	length := len(nums)
	sorted := false // 哨兵变量
	for !sorted {
		sorted = true // 提前终止标识
		for i := 0; i < length-1; i++ {
			if nums[i] > nums[i+1] {
				nums[i], nums[i+1] = nums[i+1], nums[i]
				sorted = false
			}
		}
		length--
	}
}

func main() {
	list := []int{5, 4, 3, 2, 1}
	bubbleSortV3(list)
	fmt.Println(list) // 输出: [1, 2, 3, 4, 5]
}

4 ) 方案4

package main

import (
	"fmt"
)

func bubbleSortV4(nums []int) {
	length := len(nums)
	k := length - 1 // 跳跃标识
	last := 0       // 内层循环标识
	i := 0          // 最外层循环标识

	for i < length-1 {
		for j := 0; j < k; j++ {
			if nums[j] > nums[j+1] {
				nums[j], nums[j+1] = nums[j+1], nums[j]
				last = j
			}
		}
		k = last
		i++
	}
}

func main() {
	list := []int{5, 4, 3, 2, 1}
	bubbleSortV4(list)
	fmt.Println(list) // 输出: [1, 2, 3, 4, 5]
}

5 ) 方案5

package main

import (
	"fmt"
)

func bubbleSortV5(nums []int) {
	length := len(nums)
	k := length - 1 // 跳跃标识
	last := 0       // 内层循环标识
	i := 0          // 最外层循环标识
	sorted := false // 哨兵变量

	for i < length-1 && !sorted {
		sorted = true
		for j := 0; j < k; j++ {
			if nums[j] > nums[j+1] {
				nums[j], nums[j+1] = nums[j+1], nums[j]
				last = j
				sorted = false
			}
		}
		k = last
		i++
	}
}

func main() {
	list := []int{5, 4, 3, 2, 1}
	bubbleSortV5(list)
	fmt.Println(list) // 输出: [1, 2, 3, 4, 5]
}
Python 爬虫实战:抓取应届生求职网校招岗位信息,助力学子就业 应届生求职网作为国内知名的招聘平台,汇聚了大量企业的校招岗位信息。了解这些岗位信息,对于应届毕业生制定求职策略、企业制定招聘计划以及相关就业市场分析等都具有重要意义。因此,本文将深入探讨如何运用 Python 爬虫技术从应届生求职网平台抓取校招岗位信息,为应届毕业生提供有益的就业信息支持。本文深入探究了利用 Python 爬虫技术从应届生求职网平台抓取校招岗位信息的全流程。从前期的环境搭建、模拟登录,到核心的数据抓取、存储,再到后续的数据分析与可视化,都详细展开讲解并提供代码支持。 阅读详情

相关推荐

泛微OA表单设计实战:如何快速实现自定义多选浏览框(附完整配置步骤)

本文详细介绍了在泛微OA中快速实现自定义多选浏览框的完整配置步骤。针对招聘提报、活动审批等需要从海量数据中规范选择多个条目的业务场景,文章从理解需求、构建数据源、设计查询页面到创建浏览框控件,提供了清晰的实战指南,帮助开发者高效解决复杂数据选择难题,提升表单操作体验。

yog99的博客 1051

冒泡排序-ts

/** * 冒泡排序 * @param arr */ public sort(arr:Array<number>): void { for(let i: number = 0; i < arr.length - 1; i++) { let flag:boolean = false; // 防止数组已经有序而继续排序 for(let j: number = 0; j < arr.length - i - 1; j++) { if(arr[j..

crazy_yun的博客 881

MatGPT:在MATLAB中集成AI助手,实现代码生成与调试自动化

大语言模型(LLM)通过API接口为开发者提供了强大的自然语言理解和代码生成能力,其核心原理是基于海量数据训练的Transformer架构,能够根据上下文预测并生成连贯的文本或代码。这一技术为工程实践带来了革命性价值,特别是在科学计算和算法开发领域,能够显著提升开发效率,实现智能化的代码辅助和问题解答。在实际应用中,开发者常需在IDE与AI工具间频繁切换,导致工作流中断。MatGPT作为一个开源项目,通过深度集成ChatGPT API到MATLAB环境,有效解决了这一痛点。它支持多模态输入、预设提示词管理和

weixin_42388898的博客 502

TS实现排序算法之冒泡排序

TS实现排序算法之冒泡排序

Hi-Sun的博客 1013

Ubuntu22.04系统安装及配置

下载Ubuntu22.04系统镜像(下载地址:链接:https://caiyun.139.com/m/i?提取码:fLRJ),结合rufus和系统镜像制作USB启动盘,在物理机服务器上通过USB启动盘进行安装;或通过Esxi虚拟化平台创建虚拟机,然后在虚拟机中使用系统镜像进行安装。

cheagoun的博客 8万+

CVAEGAN实现锂离子电池EIS数据增强:基于健康状态的阻抗谱生成

本文提出了一种基于CVAEGAN的锂离子电池EIS数据增强方法。该方法结合了变分自编码器和生成对抗网络的优点,能够根据指定的健康状态(SoH)生成高质量的EIS阻抗谱数据。文章详细介绍了数据预处理流程、模型架构设计(包括编码器、解码器和判别器),并提供了完整的PyTorch实现代码。通过条件生成的方式,该方法可以有效解决电池健康评估中标注数据不足的问题,为基于数据驱动的电池诊断提供更丰富的训练样本。实验结果表明,生成的EIS数据具有良好的真实性和多样性,可用于增强电池健康状态评估模型的性能。

huanghm88的专栏 501

TypeScript(中)+算法(二)

从语法上讲:函数是可以返回 undefined 的,⾄于显式返回,还是隐式返回,这⽆所谓从语义上讲:函数调⽤者不应关⼼函数返回的值,也不应依赖返回值进⾏任何操作!即使我们知道它返回了 undefined。

2302_80277784的博客 1159

2025.06.16【转录组】|Ribo-seq数据流程详解(二 基因组比对)

本文详细介绍了Ribo-seq数据分析中的比对流程,包括环境准备、STAR索引构建、比对参数设置及结果统计可视化。通过samtools和R脚本实现比对质量评估,提供常见问题解决方案和关键指标解读。该流程强调比对参数优化和质量控制,为后续翻译组学分析奠定基础。

1980

【TypeScript】do...while 循环

do…while 循环 do...while 循环,是因为不论什么情况,它都会首先 do(运行)循环里的第一部分代码,然后 while(当)规定的条件被评估为 true(真)的时候,它会继续运行循环。 使用 while 循环 const ourArray = []; let i = 5; ​ while (i < 5) { ourArray.push(i); i++; } 这个例子中,定义了一个空数组 ourArray 以及一个值为 5 的 i 。 当执行 while 循环时,因为 i 不

VirusScanLog的博客 775

7.18 GART 与 GPUVM 对比:一颗 GPU 上两套页表的分工

本文横向对比AMD GPU上并存的GART与GPUVM两套页表。GART为内核专用,全局单一,线性单层结构,CPU同步直写;GPUVM为每进程48位地址空间,四级页表,含并发状态机,支持隔离与迁移。二者通过VMID区分,共享GMC硬件与PTE编码,分工互补。

图形/计算GPU的驱动与虚拟化技术分享园地 393

【GameFramework框架】一、框架介绍

这是GameFramework框架教程的第一篇,但是博主不准备直接就讲GameFramework框架。【GameFramework框架】二、GameFramework框架介绍了。框架(Framework)通常被理解为一种基础要素的集合,它们用于承载系统的必要功能。约束性:框架定义了解决特定问题的边界,并将相关的软件组件约束在这个范围内,以保持框架的内聚性和解决问题的专注性。支撑性:框架本身不直接解决问题,而是提供一个基础的支撑结构,使得在其上构建的解决方案更为灵活和高效。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 1万+

TypeScript版冒泡

maopao(arr: number[], num: number): number[] { let item = 0; let temp; for (var index = 1; index arr.length - num; index++) { var element = arr[index]; if (arr[index] < arr[index - 1

MissNull的博客 855

高级电机控制场景实例:基于Simulink的永磁同步电机基于Luenberger观测器的弱磁控制仿真

本文基于Simulink实现表贴式永磁同步电机(SPMSM)的Luenberger观测器弱磁控制仿真,通过构建“观测-弱磁-控制”协同逻辑,突破传统矢量控制的基速限制。利用线性化模型设计观测器实时估计电流与磁链,结合电压极限约束动态注入负d轴电流,实现转速扩展至12000rpm(4倍基速),弱磁区电流THD低于3%,动态响应时间小于5ms,验证了高速运行下系统稳定性与鲁棒性。附完整建模步骤、MATLAB函数代码及性能分析,适用于电动汽车、机床等高速驱动场景,为高级电机控制提供可复现的技术范式。

amy_mhd的博客 33

数据结构与算法之堆: LeetCode 215. 数组中的第K个最大元素 (Ts, Py, Go版)

1 )基于js中原生sort api。2 )基于堆的数据结构和堆排序的方法。3 )基于冒泡排序。 4 ) 基于快速排序。

Wang的专栏 481

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

算法与数据结构面试宝典——冒泡排序算法

冒泡排序 bubble sort」通过连续地比较与交换相邻元素实现排序。这个过程就像气泡从底部升到顶部一样,因此得名冒泡排序。如下图所示,冒泡过程可以利用元素交换操作来模拟:从数组最左端开始向右遍历,依次比较相邻元素大小,如果“左元素 > 右元素”就交换它俩。遍历完成后,最大的元素会被移动到数组的最右端。

白话机器学习 196

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数据结构与算法之排序: 插入排序 (Ts, Py, Go版)

【代码】数据结构与算法之排序: 插入排序 (Javascript版)

Wang的专栏 260

DSHCode插件开发Cookbook:工具、设置卡片与LLM适配器的扩展清单

DSHCode 是 DeepSeek Harness 的免费开源桌面伴侣应用,完全基于插件化架构运行。这篇 **DSHCode 插件开发 Cookbook** 面向新手,一次讲清三种最实用的扩展形态——**工具插件**、**设置卡片**与 **LLM 适配器**,并附上完整的官方文档路径清单,帮你照着参考实现快速完成自己的第一个插件。 [![DSHCode 插件开发主界面](https://ra

gitblog_00231的博客 1046

Hello 算法中冒泡排序的实现原理、效率优化与多语言代码解析

冒泡排序(bubble sort)通过连续地比较与交换相邻元素实现排序:这个过程就像气泡从底部升到顶部一样,因此得名。本篇技术文章基于《Hello 算法》仓库中 [冒泡排序](https://link.gitcode.com/i/8f266e7cb9ade7515a16b499d13a9498) 一章,系统讲解其算法流程、`flag` 标志位优化与复杂度特性,并对照仓库内 Python、Java、

gitblog_00947的博客 408

Hello 算法排序章小结:七种经典排序算法的原理、优化与选型全解析

本文基于《Hello 算法》排序章的小结文档([docs/chapter_sorting/summary.md](https://link.gitcode.com/i/666ee32a0a4f96eae555656ba6bcd6ac)),系统回顾冒泡、插入、快速、归并、桶、计数与基数七种排序算法的核心思想与时间复杂度结论,并结合仓库中 [Python 实现代码](https://link.gitc

gitblog_01002的博客 972

Hello 算法·冒泡排序(Bubble Sort)深度解析:原理、双循环流程与 flag 优化

冒泡排序(bubble sort)是《Hello 算法》排序章节中首先讲解的入门级排序算法,它通过连续比较与交换相邻元素,把最大元素像气泡一样逐轮"顶"到数组末端。本指南以仓库中冒泡排序章节文档为骨架,结合 Python、C++、Java、C、Go 等语言的同源实现代码,系统讲解算法原理、内外双循环的边界设计、`flag` 标志位优化的本质,以及时间/空间/稳定性三大算法特性,帮助你真正"读懂"并

gitblog_00134的博客 420

7种排序算法动画详解:从冒泡到堆排序的实战指南

排序算法是编程基础中的核心知识,也是面试和实际开发中频繁使用的技能。《Hello 算法》项目提供了动画图解、一键运行的数据结构与算法教程,支持 Java, C++, Python 等多种语言,帮助开发者直观理解排序算法的工作原理。本文将通过动画图解方式,详细解析7种常用排序算法的实现过程、优缺点及适用场景,让你轻松掌握排序算法的精髓。 ## 排序算法概览:选择最适合你的排序方案 🚀 排序算法

gitblog_00974的博客 531

hello-algo 俄语版数据结构与算法术语表:英俄中三语对照与仓库源码印证

本文基于《Hello 算法》(hello-algo)仓库俄语文档附录中的术语表([terminology.md](https://link.gitcode.com/i/3bed2c2ddb4f88013459a6f07cc20f1c)),完整收录全书 128 个核心数据结构与算法术语的英俄对照(并补充简体中文对照),将这些术语按复杂度分析、数组链表、栈队列、哈希、树、堆、图、查找排序、分治、回溯、

gitblog_00380的博客 425

Hello 算法排序章节练习精解:选择/冒泡推演、稳定性辨析与归并、计数排序完整实现

本文基于《Hello 算法》排序章的 [练习题](https://link.gitcode.com/i/3a327948e4f5520ba8cfccef18a52d66) 展开:先逐题推演选择排序、冒泡排序的前几轮执行过程,辨析两种排序对相等元素相对次序的影响,再对比计数排序与基数排序在"大量 8 位学号"场景下的适用性;随后给出归并排序(LeetCode 912「排序数组」)与计数排序(Leet

gitblog_01137的博客 292

插入排序(Insertion Sort)深度解析:《Hello 算法》排序章节的稳定基石与实战指南

本文以《Hello 算法》英文文档 [insertion_sort.md](https://link.gitcode.com/i/fc796924a00fa4a6f74985fe5d8d05a3) 为主体,系统讲解插入排序(Insertion Sort)的思想、完整算法流程、复杂度与稳定性分析,并对照本仓库 [en/codes](https://link.gitcode.com/i/861495d

gitblog_00608的博客 698

Hello 算法排序章节总结:九大排序算法的复杂度对照、取舍原则与高频疑难解析

本指南是《Hello 算法》中"排序"章节的**章节总结型技术梳理**,以 [en/docs/chapter_sorting/summary.md](https://link.gitcode.com/i/0da3b5bd5eaddf491a9f00547b59f2fd) 为骨架,将冒泡、插入、快速、归并、桶、计数、基数等九大排序算法的核心要点浓缩成一张可复用的"知识地图",并深入解答"稳定性何时必

gitblog_00682的博客 341

《Hello 算法》桶排序(Bucket Sort)深度解析:线性时间非比较排序与均匀分桶策略

桶排序(bucket sort)是《Hello 算法》排序章节中典型的「非比较排序」算法,它放弃两两比较元素的路线,转而借助「分治」思想将数据先分散到若干有序区间(桶)中,再逐个桶排序、按序合并,从而在理想情况下把排序时间复杂度推进到线性阶 $O(n)$。本文以 [ru/docs/chapter_sorting/bucket_sort.md](https://link.gitcode.com/i/

gitblog_01021的博客 850

Hello 算法:泡沫排序(Bubble Sort)原理、最佳化與多語言實作全解析

泡沫排序(bubble sort)是資料結構與演算法入門階段最經典的排序演算法之一,其核心思想樸素直觀:透過連續比較與交換相鄰元素,讓較大的元素像氣泡一樣逐步「浮」到陣列末端。本篇文章以《Hello 算法》繁中版 [泡沫排序章節](https://link.gitcode.com/i/f2aaa04485ea4912c27e1b13b4496a70) 為主體骨架,結合倉庫中 C、C++、Pytho

gitblog_00958的博客 412
上一篇: 数据结构与算法之排序: 侏儒排序 (Ts, Py, Go版)
下一篇: 数据结构与算法之排序: 快速排序 (Ts, Py, Go版)
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值