算法基础 - 冒泡排序
创作时间:
作者:
@小白创作中心
算法基础 - 冒泡排序
引用
CSDN
1.
https://m.blog.csdn.net/limeigui/article/details/144958597
冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。重复进行直到没有再需要交换的元素,这意味着数列已经排序完成。冒泡排序法采用不停地交换彼此位置来实现,故而形象地称之为冒泡。大致一个气泡从水底一直冒到水面。
原理演示
- 循环两个变量:外层(轮数)、内层每轮的次数;
- 总轮数=元素长度-1=最大下标
- 每轮次数=元素长度-1-轮数=最大下标-轮数;
- 轮数(++),次数(++);
- 两两交换,大的放后面
示例一
一小段排序程序如下:
- 外层循环:主要是用来轮询
- 内层循环:主要用来交换位置(前提是满足if条件)
- 外层循环的停止条件 i < len 这应该能理解,内层循环的停止条件 j < len -i -1 来说明一下: 首先 len - 1 这个为什么要减掉 1, 因为下面 if 中有使用 buf [j+1], 所以这里要减掉1,不然 buf [j+1] 就会发生越界行为(超出了数组最大数组下标),接着看 len-i,为什么又要减掉 i 呢?因为内层循环每完成一次,最大那个值(或最小那个值),就已经交换到了最后的位置,所以下次交换的时候我们就要减少一次交换已经排序好的元素,依次类推,所以就有 len - i 这样的条件,最后合起来就是 j < len - i - 1 了。
以下是冒泡排序的C++实现:
#include <iostream>
using namespace std;
void bubbleSort(int arr[], int n)
{
int cnt = 0;
for (int i = 0; i < n - 1; i++)
{
// 设定一个标记,判断本次遍历是否进行了交换
bool swapped = false;
// 最后的元素是在上一轮遍历中已经冒到最后的,所以不需要再比较
for (int j = 0; j < n - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
// 交换
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
// 表示进行了交换
swapped = true;
}
}
// 如果这一轮没有交换,意味着数组已经排序好了
if (swapped == false)
break;
++cnt;
}
cout << "一共执行了:" << cnt << endl;
}
void printArray(int arr[], int size)
{
for (int i = 0; i < size; i++)
cout << arr[i] << " ";
cout << endl;
}
int main()
{
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
cout << "Sorted array: \n";
printArray(arr, n);
return 0;
}
执行结果:
一共执行了:14
Sorted array:
11 12 22 25 34 64 99
热门推荐
顺丰快递锂电池运输新规详解:重量、电压、包装全要求
顺丰牵手安徽供销集团,共筑乡村振兴物流新生态
食盐巧治脚气脚臭,两个实用小妙招轻松告别尴尬
用盐洗脚,轻松去除脚部污垢和死皮
食盐搓脚泡脚,改善脚气脚臭还助眠
从1954年首台工业机器人问世到服务机器人普及
AI威胁还是伙伴?五部影视作品解读科技伦理
解码AI视频生成:技术原理与行业应用全景
7.3分以上!10部豆瓣高分冷门科幻片全解析
高考志愿填报策略13问答,你关心的都在这→
浩瀚海洋,对潍坊意味着什么?
从分段到储存:新手爸妈必备的国产奶粉使用指南
2024年度十大科技新闻事件、人物、热词今日发布
多重因素扰动亚太股市前景
7种水果堪称高血压克星!常吃保护血管健康
对心脏好的食物和水果
番石榴种植技术:从园地选择到病虫防治的全方位指南
锅塌豆腐,味道鲜美
番石榴:热带水果中的小清新
从频繁放屁看健康隐患:饮食、消化、菌群失衡等四大诱因
番石榴采摘上市全攻略(探访番石榴成熟季节,让你吃到最好的果实)
新·健康|芭乐抗三高最佳!芭乐防癌消脂降血压营养师教你吃
交通事故现场证据这样收集,助你维权更有力
四跨赤道,“深潜”地球最长山脉,中国大洋83航次揭秘
流量要向上向善:小红书首推账号“真诚分”体系,对黑灰产账号内容说“不”
小红书怎么被推荐:深度解析小红书的推荐机制与策略
餐饮场所安全检查要点
打造电力设施保护"联防、联管、联控"体系 护航地区电网安全稳定运行
济南这些养眼又清肺的好地方,一键解锁你的治愈周末!
安徽临泉:城市建设结硕果 满城秀色入画来