C#冒泡排序及其优化
1、冒泡排序
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
2、算法原理
- 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
- 针对所有的元素重复以上的步骤,除了最后一个;
- 重复以上步骤,直到排序完成。
2.1、动图演示
B站视频详细讲解
namespace Bubble
{
class Program
{
static void Main(string[] args)
{
{
int temp = 0;
int[] arr = { 23, 44, 66, 76, 98, 11, 3, 9, 7 };
Console.WriteLine("排序前的数组:");
foreach (int item in arr)
{
Console.Write(item + " ");
}
Console.WriteLine();
//外层循环是控制内层循环的次数,也就是说外层循环每循环一遍,让内层循环每次循环的次数减一次这样就保证内层循环每次循环结束后最后面一个都是最大
for (int i = 0; i < arr.Length-1; i++)
{
//内循环为每趟比较的次数,第i趟比较len-i次
for (int j = 0; j < arr.Length - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
Console.WriteLine("排序后的数组:");
foreach (int item in arr)
{
Console.Write(item + " ");
}
Console.WriteLine();
Console.ReadKey();
}
}
}
}
再来啰嗦一句:(还是迷糊的建议看上面的B站视频)
冒泡排序:
1、从当前元素起,向后依次比较每一对相邻元素,若逆序则交换
2、对所有元素均重复以上步骤,直至最后一个元素
3、外循环为排序趟数,len个数进行len-1趟
4、内循环为每趟比较的次数,第i趟比较len-i次
5、 相邻元素比较,若逆序则交换(升序为左大于右,降序反之)
int[] sums = { 23, 44, 66, 76};
int compareCount = 0;
Console.WriteLine("排序前的数组:");
foreach (int item in sums)
{
Console.Write(item + " ");
}
Console.WriteLine();
//冒泡排序法优化
//当循环内交换不再进行时,也就是整个序列已经有序,这时可以结束排序以达到优化目的
bool flag = true;
for (int i = 0; i < sums.Length - 1 && flag; i++) //总共要比较的趟数
{
flag = false;
for (int j = 0; j < sums.Length - 1 - i; j++) //每趟中要比较的次数
{
if (sums[j] > sums[j + 1]) //判断两个数值的大小,若前一项比后一项大,则交换位置
{
int temp = sums[j];//定义一个中间量temp
sums[j] = sums[j + 1];
sums[j + 1] = temp;
flag = true;
}
compareCount++;
}
}
Console.Write("使用冒泡排序后得到的顺序为:");
for (int i = 0; i < sums.Length; i++) //将排序后的数值按序输出
{
Console.Write(sums[i] + " ");
}
Console.WriteLine();
Console.WriteLine("排序次数为:");
Console.WriteLine(compareCount);
Console.ReadKey();