冒泡排序

部分内容引用自 知乎:程序员贺同学 整理的C++八股文
↑ 他总结分享的很棒

(1)冒泡排序
算法描述:

  • ⽐较相邻的元素。如果第⼀个⽐第⼆个⼤,就交换它们两个;
  • 对每⼀对相邻元素作同样的⼯作,从开始第⼀对到结尾的最后⼀对,这样在最后的元素应
  • 该会是最⼤的数;
  • 针对所有的元素᯿复以上的步骤,除了最后⼀个;
  • ᯿复步骤 1~3,直到排序完成。

⽤⼀个例⼦,带你看下冒泡排序的整个过程。我们要对⼀组数据 4,5,6,3,2,1,从⼩到
到⼤进⾏排序。第⼀次冒泡操作的详细过程就是这样

可以看出,经过⼀次冒泡操作之后,6 这个元素已经存储在正确的位置上。要想完成所有数据
的排序,我们只要进⾏ 6 次这样的冒泡操作就⾏了。

#include <iostream>
#include <vector>
void BubbleSort(std::vector<int> &nums) {
int n = nums.size();
if (n <= 1) return;
bool is_swap;
for (int i = 1; i < n; ++i) {
is_swap = false;
for (int j = 1; j < n - i + 1; ++j) {
if (nums[j] < nums[j-1]) {
std::swap(nums[j], nums[j-1]);
is_swap = true;
}
}
if (!is_swap) break;
}
}
int main() {
std::vector<int> nums = {34,66,2,5,95,4,46,27};
BubbleSort(nums);
for (int num : nums) {
std::cout << num << " ";
}
// Output: 2 4 5 27 34 46 66 95
return 0;
}

C# 语言 实现冒泡排序

namespace 冒泡排序
{
class Program
{
// 从小到大排序
void BubbleSort( int [] nums)
{
for (int i = 0; i < nums.Length; i++)
{
bool swapped;
// 小于nums.Lenght-1-i 是因为 从左向右比较,右边会留下排好的,排好的不用再进行比较了。
for (int j = 0; j < nums.Length - 1 - i; j++)
{
swapped = false; //放里面 每次都初试为false, 可能循环过程中成为了true,改回来
if (nums[j] > nums[j + 1])
{
//C++直接用swap函数就行了,c#要自己写
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
//交换了就记一下
swapped = true;
}
if (!swapped) //如果没有发生交换,那么就是排好了,提前退出
{
break;
}
}
}
}
static void Main(string[] args)
{
Program program = new Program();
//int[] nums = { 5, 4, 7, 2, 3 };
int[] nums = new int[5] { 6, 3, 7, 4 ,9};
program.BubbleSort(nums);
//Console.WriteLine(nums); //笨蛋C# 这个函数不会输出数组里的元素,而是输出数组的类型
Console.WriteLine(string.Join(", ", nums)); //输出数组中的元素 要不就用for,foreach循环输出元素
Console.ReadKey();
}
}
}
posted @   专心Coding的程侠  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示