C#冒泡排序算法,基础数据结构与算法实现,适合编程初学者学习

C++

对于编程初学者来说,冒泡排序是绕不开的基础算法之一。它的逻辑简单易懂,就像水里的气泡一样,会慢慢“浮”到水面,因此得名冒泡排序。今天我们就用C#语言来实现它,一起走进算法的世界。

💡 冒泡排序的核心原理

冒泡排序的核心思想很直白:重复地走访过要排序的元素列,依次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。

  • 每一轮排序都会把当前未排序部分的最大元素“冒泡”到末尾
  • 经过n-1轮排序(n为元素个数),整个序列就会变得有序
  • 时间复杂度为O(n²),虽然效率不算高,但胜在逻辑简单,适合入门理解排序思想

💻 C#实现冒泡排序的完整代码

Csharp
复制
using System;

namespace BubbleSortDemo
{
class Program
{
static void Main(string[] args)
{
// 待排序的数组
int[] arr = { 64, 34, 25, 12, 22, 11, 90 };

Console.WriteLine("排序前的数组:");
PrintArray(arr);

// 调用冒泡排序方法
BubbleSort(arr);

Console.WriteLine("\n排序后的数组:");
PrintArray(arr);
}

/// <summary>
/// 冒泡排序方法
/// </summary>
/// <param name="arr">待排序的数组</param>
static void BubbleSort(int[] arr)
{
int n = arr.Length;
// 外层循环:控制排序轮数,共n-1轮
for (int i = 0; i < n - 1; i++)
{
// 内层循环:比较相邻元素,每轮都会减少i次比较
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;
}
}
}
}

/// <summary>
/// 打印数组方法
/// </summary>
/// <param name="arr">要打印的数组</param>
static void PrintArray(int[] arr)
{
foreach (int item in arr)
{
Console.Write(item + " ");
}
}
}
}


📝 代码逐行解析

🔹 基础结构与初始化

  • 首先我们创建了一个控制台应用程序,定义了待排序的整数数组
  • PrintArray方法用于打印数组,方便我们查看排序前后的效果

🔹 核心排序逻辑

  • 外层循环for (int i = 0; i < n - 1; i++) 控制排序的轮数,因为n个元素只需要n-1轮就能完成排序
  • 内层循环for (int j = 0; j < n - i - 1; j++) 负责每一轮的相邻元素比较,每完成一轮,末尾的i个元素已经是有序的,不需要再比较
  • 元素交换:当发现前一个元素大于后一个元素时,通过临时变量temp完成交换

🔹 运行结果

执行程序后,你会看到这样的输出:

排序前的数组:
64 34 25 12 22 11 90 

排序后的数组:
11 12 22 25 34 64 90 

🚀 优化冒泡排序:提前终止与标记优化

上面的代码是最基础的冒泡排序实现,我们可以做一些优化来提升效率:

Csharp
复制
static void OptimizedBubbleSort(int[] arr)
{
int n = arr.Length;
bool swapped; // 标记是否发生了交换

for (int i = 0; i < n - 1; i++)
{
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)
break;
}
}

  • 增加了swapped标记,如果某一轮没有发生任何交换,说明数组已经有序,可以提前结束排序
  • 这个优化在数组接近有序时能大幅减少排序时间

🎯 初学者学习要点

  1. 理解交换逻辑:重点掌握相邻元素的比较与交换过程
  2. 跟踪排序过程:可以在代码中添加打印语句,查看每一轮排序后的数组状态
  3. 尝试手动模拟:拿一个小的数组,手动模拟冒泡排序的过程,加深理解
  4. 对比优化版本:理解优化版本如何减少不必要的比较,提升效率

免责声明:
1.本站所有源码支持免费互换,所有资源来源于网络,分享目的仅供大家学习和交流!不得使用于非法商业用途,不得违反国家法律。否则后果自负!(下载即表示同意遵守此条例!) 所有资源,不能保证完全去除后门和源码的完整性!(建议先用D盾 等查杀软件先扫描一遍!)且都不包含技术服务请大家谅解!
2.根据二○○二年一月一日《计算机软件保护条例》规定:为了学习和研究软件内含的设计思想和原理, 通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可, 不向其支付报酬!鉴于此,也希望大家按此说明研究!
3.本站所有源码均收集来源于网络,若此源码资源等文章侵犯您的合法权益,请私信联系站长,并于24小时内删除下架。
4.本站所有源码仅限学习,交流使用,请勿上线或非法使用,一切法律责任均于此站无关。
5.侵权联系邮箱:188773464@qq.com
6.若您最终确认购买,则视为您100%认同并接受以上所述全部内容。

源码下载网 C++ C#冒泡排序算法,基础数据结构与算法实现,适合编程初学者学习 https://svipm.com.cn/21989.html

相关文章

猜你喜欢