八大排序之冒泡排序+选择排序

先给一个数组arr\[\]{5,2,9,1,5,6}通过这个数组讲解

一、冒泡排序(从小到大)

原理:相邻两个数比较,大的往后 "冒",每一趟确定最后一个最大数。

数组:5 2 9 1 5 6一共 6 个数,需要 5 趟。

第 1 趟(确定最后一位:最大数 9)

从头两两比:

  • 5 和 2 → 5>2,交换 → 2 5 9 1 5 6
  • 5 和 9 → 不换
  • 9 和 1 → 9>1,交换 → 2 5 1 9 5 6
  • 9 和 5 → 9>5,交换 → 2 5 1 5 9 6
  • 9 和 6 → 9>6,交换 → 2 5 1 5 6 9

第 1 趟结束:2 5 1 5 6 9

第 2 趟(确定倒数第二位:6)

只比前 5 个:2 5 1 5 6

  • 2 和 5 → 不换
  • 5 和 1 → 交换 → 2 1 5 5 6
  • 5 和 5 → 不换
  • 5 和 6 → 不换

第 2 趟结束:2 1 5 5 6 9

第 3 趟(确定倒数第三位:5)

只比前 4 个:2 1 5 5

  • 2 和 1 → 交换 → 1 2 5 5
  • 2 和 5 → 不换
  • 5 和 5 → 不换

第 3 趟结束:1 2 5 5 6 9

第 4 趟

比前 3 个:1 2 5已经有序,无交换。结果不变:1 2 5 5 6 9

第 5 趟

比前 2 个:1 2有序,无交换。

最终排序:1 2 5 5 6 9

代码实现:

cpp 复制代码
void BubbleSort1(int* arr, int len)
{
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				swap(arr[j], arr[j + 1]);
			}
		}
	}
}

冒泡优化:给一个tag 当一趟下来没有交换的时候,说明这时候的数组已经有序了,则直接return

cpp 复制代码
void BubbleSort2(int* arr, int len)
{
	
	for (int i = 0; i < len - 1; i++)
	{
		bool tag = true;
		for (int j = 0; j < len - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				swap(arr[j], arr[j + 1]);
				tag = false;
			}
			
		}
		if (tag)return;
	}
}

二、选择排序(从小到大)

原理:每一趟在未排序部分找最小值,直接和未排序第一个位置交换。

数组:5 2 9 1 5 6同样 5 趟。

第 1 趟(确定第 1 位)

未排序:5 2 9 1 5 6找最小值:1(下标 3)和第 1 位交换:

第 1 趟结束:1 2 9 5 5 6

第 2 趟(确定第 2 位)

未排序从第 2 位开始:2 9 5 5 6最小值是 2,已经在位置上,不用交换。

第 2 趟结束:1 2 9 5 5 6

第 3 趟(确定第 3 位)

未排序从第 3 位开始:9 5 5 6最小值是 5(下标 3)和第 3 位交换:

第 3 趟结束:1 2 5 9 5 6

第 4 趟(确定第 4 位)

未排序从第 4 位开始:9 5 6最小值是 5(下标 4)和第 4 位交换:

第 4 趟结束:1 2 5 5 9 6

第 5 趟(确定第 5 位)

未排序从第 5 位开始:9 6最小值是 6(下标 5)和第 5 位交换:

第 5 趟结束:1 2 5 5 6 9

cpp 复制代码
void SelectSort(int* arr, int len)
{
	if (arr == nullptr || len <= 0) return;
	for (int i = 0; i < len - 1; i++)
	{
		int Index = i;
		for (int j = i + 1; j < len; j++)
		{
			if (arr[j] < arr[Index])
			{
				Index = j;
			}
		}
		swap(arr[Index], arr[i]);
	}
}
相关推荐
青少儿编程课堂3 分钟前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
武子康2 小时前
Qwen-Drive 到底是什么:4B 级 VLM 如何成为驾驶策略底座
人工智能·算法·机器学习
zh_xuan3 小时前
LeeCode 496. 下一个更大元素I
数据结构·算法·栈·单调栈
机 _ 长4 小时前
05 智算运维|8 张卡怎么才算「捆成一张」:NCCL 实测与拓扑
运维·人工智能·算法·智算运维
早起CaiCai4 小时前
【2023-01 OM】利用深度学习算法融合异质观测实现海洋场降尺度
人工智能·深度学习·算法
梦里寻码5 小时前
我用 NestJS + Vue3 写了一套完整的研发管理系统(58 表 / 229 API / 130 项断言,全开源
前端·后端·算法
猿人谷5 小时前
Surrogate Model:让进化算法学会“预测”,为什么它正在成为智能优化的重要技术?
后端·算法·架构
青少儿编程课堂7 小时前
蓝桥杯青少组图形化 STEMA 省考(报名倒计时·11/22开考)+ 全国青少年信息素养大赛 2026—2027赛季 + 电子学会图形化考级:校园华容道大闯关
c++·python·算法·bfs·信息学竞赛
白杨尚青7 小时前
C++进阶篇(五):红黑树——四条规则、三种插入情况与旋转变色
开发语言·数据结构·c++·stl·红黑树·平衡二叉树