冒泡排序(Bubble Sort)是一种最简单的交换排序。它的算法思想是比较相邻记录的关键字,如果发生逆序,则进行交换,从而使关键字大的往下"坠落"或者关键字小的往上"漂浮"
具体代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 冒泡排序
{
public class Bubblesort
{
public void Sort(int[]list)
{
int m = list.Length - 1; //此变量m表示冒泡的轮数
int flag = 1; //flag标记用来检测是否发生了冒泡交换
while ((m > 0) && (flag == 1)) //此循环用于控制冒泡的轮数
{
flag = 0; //表明要发生交换,置flag=0
for (int j = 0; j < m; j++) //使用数组下标时一定要注意是否越界
if (list[j] > list[j + 1])
{
flag = 1;
int t;
t = list[j];
list[j] = list[j + 1];
list[j + 1] = t;
}
m--; //轮数减1
}
}
}
class Program
{
static void Main(string[] args)
{
int[] iArry = new int[] {49,38,65,97,76,13,27,49 };
Bubblesort ii = new Bubblesort();
ii.Sort(iArry);
for (int i = 0; i < iArry.Length; i++)
Console.Write("{0} ",iArry[i]);
}
}
}
时间复杂度: 最好情况为此序列已经排好序,只需进行n-1次比较;最坏情况为完全逆序,需要进行n-1趟排序,总的关 键字比较次数KCN为 n(n-1)/2,记录移动次数RMN为 3n(n-1)/2 (每比较一次都需进行三次记录移动)。故在平均情况下比较次数和记录移动数分别为n²/4和3n²/4,因此时间复杂度为O(n²)
空间复杂度: 仅仅借助一个辅助变量t,故空间复杂度为O(1)。
个人总结: 我学习冒泡排序时首先理解了大致的一个过程,在凭借自己的感觉去写这一段代码。我自己刚开始写的时候,并没有参考书上的代码。出现的问题是第一:以为标记flag没有用,其实不然,其原因是如果此序列要是已经有序的话,则标记不会改变,即不会进入while循环,排序结束。没有此标记的,尽管已经排好了序,还是要进入while循环,浪费时间; 第二是仅仅写了for循环,刚开始并没有要while循环,运行调试才发现,只冒了一个泡。