冒泡排序(C#)

冒泡排序(C#)

 

   将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止.[动画演示] 

 

   代码实现如下:

  

冒泡排序是一种简单且常见的排序算法,它通过重复遍历待排序的数列,比较每对相邻项,并在顺序错误时交换它们的位置,直到没有需要交换的项为止。该算法的时间复杂度为 $O(n^2)$,适用于小型数据集或教学示例。 以下是一个典型的冒泡排序算法C# 实现: ```csharp using System; class Program { static void Main() { int[] numbers = { 8, 3, 2, 4, 7, 6, 5 }; Console.WriteLine("未排序数组:"); PrintArray(numbers); BubbleSort(numbers); Console.WriteLine("\n已排序数组:"); PrintArray(numbers); } static void BubbleSort(int[] array) { int n = array.Length; for (int i = 0; i < n - 1; i++) { // 每一轮比较,最大的元素会“冒泡”到末尾 for (int j = 0; j < n - 1 - i; j++) { if (array[j] > array[j + 1]) { Swap(array, j, j + 1); } } } } static void Swap(int[] array, int indexX, int indexY) { int temp = array[indexX]; array[indexX] = array[indexY]; array[indexY] = temp; } static void PrintArray(int[] array) { foreach (int num in array) { Console.Write(num + " "); } Console.WriteLine(); } } ``` ### 冒泡排序的工作原理 冒泡排序通过多次遍历数组来完成排序任务。在每次遍历时,它会比较相邻的两个元素,如果它们的顺序错误(例如,前一个元素大于后一个元素),则交换它们。这样,每一轮遍历后,最大的未排序元素将“冒泡”到数组的末尾。这个过程会重复进行,直到整个数组有序为止[^3]。 ### 可扩展性 上述代码可以轻松修改以支持不同的数据类型(如 `double` 或 `float`)或用户输入。例如,可以添加控制台输入功能,让用户自定义数组长度和元素值[^2]。 ### 优化 为了提升冒泡排序的效率,可以在算法中添加一个标志变量,用于检测某一轮遍历中是否发生过交换。如果没有发生交换,说明数组已经有序,可以提前结束排序过程。 ```csharp static void BubbleSortOptimized(int[] array) { int n = array.Length; bool swapped; for (int i = 0; i < n - 1; i++) { swapped = false; for (int j = 0; j < n - 1 - i; j++) { if (array[j] > array[j + 1]) { Swap(array, j, j + 1); swapped = true; } } if (!swapped) break; } } ``` 这种优化方式可以显著减少不必要的比较和交换操作,尤其是在数组已经部分有序的情况下[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值