首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【初探数据结构】详解三大经典排序算法(选择/堆/冒泡)

【初探数据结构】详解三大经典排序算法(选择/堆/冒泡)

作者头像
我想吃余
发布2025-03-31 18:21:24
发布2025-03-31 18:21:24
19400
代码可运行
举报
运行总次数:0
代码可运行

引言

排序算法是数据结构的核心基础。本文通过选择排序、堆排序、冒泡排序的对比解析,帮助初学者掌握算法思想与实现细节。文末附算法对比总结表。


一、选择排序(Selection Sort)

1.1 核心思想

“选最小的,放左边” “选最大的,放右边” 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完

这里我们在序列两头同时进行选择排序,可以一定程度上提高选择排序的性能。

1.2 动态示意图

[示例数组:7, 3, 5, 1]

  • 第1轮:找到最小值1 ↔ 与7交换 → [1, 3, 5, 7]
  • 第2轮:在剩余部分找最小3(已在正确位置)
  • 第3轮:找最小5 ↔ 无需交换
  • 排序完成
1.3 代码实现
代码语言:javascript
代码运行次数:0
运行
复制
void SelectSort(int* a, int n)
{
	//定义左右指针
	int left = 0;
	int right = n - 1;
	//当左右指针相遇,排序完成
	while (left < right)
	{
		int max = left, min = left;
		//遍历选出最大最小数
		for (int i = left+1; i <= right; i++) {
			if (a[max] > a[i]) {
				max = i;
			}
			if (a[min] < a[i]) {
				min = i;
			}
		}
		swap(&a[left], &a[min]);
		if (left == max)
			max = min;
		swap(&a[right], &a[max]);
		left++;
		right--;
	}
}
1.4 关键特性
  • 时间复杂度:O(n²)(双重循环)
  • 空间复杂度:O(1)(原地排序)
  • 不稳定性:交换可能破坏相等元素顺序(如 [5, 5, 2]

二、堆排序(Heap Sort)

堆排序在学习堆的时候学习过哦(´▽ʃ♡ƪ) 欢迎学习 🚀传送门【初探数据结构】堆的应用实例(堆排序与TopK问题)

三、冒泡排序(Bubble Sort)

相信大家堆冒泡已经耳熟能详了吧,那么你是否能手撕呢?这也是检验你C语言代码功底的试金石哦😉

3.1 核心思想

“相邻比武,大的沉底” 通过相邻元素比较交换,使较大元素逐渐移动到末尾。

3.2 优化技巧
  • 提前终止:若某轮未发生交换,说明已有序
  • 记录最后交换位置:减少后续比较范围
3.3 动态示例

初始数组:[6, 3, 8, 2]

  • 第1轮:3↔6, 6↔8 → [3, 6, 2, 8]
  • 第2轮:2↔6 → [3, 2, 6, 8]
  • 第3轮:2↔3 → [2, 3, 6, 8]
3.4 代码实现(带优化)
代码语言:javascript
代码运行次数:0
运行
复制
// 冒泡排序
void BubbleSort(int* a, int n)
{
	for (int j = 0; j < n; j++)
	{
		bool exchange = false;
		for (int i = 0; i < n - 1 - j; i++)
		{
			if (a[i] > a[i + 1]) {
				swap(&a[i], &a[i + 1]);
				exchange = true;
			}
		}
		if (exchange == false) {
			break;
		}
	}
}
3.5 关键特性
  • 时间复杂度:最佳O(n)(已排序),最差O(n²)
  • 稳定性:稳定(相等元素不交换)
  • 教学意义:直观体现排序过程,适合入门教学
3.6 扩展学习

🚀传送门高阶C语言|库函数qsort的使用以及用冒泡排序实现qsort的功能详解


四、对比总结表

特性

选择排序

堆排序

冒泡排序

时间复杂度

O(n²)

O(n log n)

O(n²)

空间复杂度

O(1)

O(1)

O(1)

稳定性

不稳定

不稳定

稳定

适用场景

小数据集

大数据集

教学演示

优点

简单易实现

高效的大数据排序

稳定且直观

缺点

效率低

实现较复杂

效率最低

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 一、选择排序(Selection Sort)
    • 1.1 核心思想
    • 1.2 动态示意图
    • 1.3 代码实现
    • 1.4 关键特性
  • 二、堆排序(Heap Sort)
  • 三、冒泡排序(Bubble Sort)
    • 3.1 核心思想
    • 3.2 优化技巧
    • 3.3 动态示例
    • 3.4 代码实现(带优化)
    • 3.5 关键特性
    • 3.6 扩展学习
  • 四、对比总结表
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档