static void Main(string[] args)
{
int[] array = {90,36,52,23,235,314,131,3,456,34};
BubbleSort(array);
Console.ReadLine();
}
/// <summary>
/// 名称:冒泡排序
/// 原理:如果有n个数进行排序,需要将n-1个数进行归位,即需要进行n-1趟。而每一趟都需要从第1个数字开始比较,直到最后一位尚未归位的数.
/// 举例:10个数进行排序,第一趟最小的数会归位到最后一位,即第10位,第二趟将倒数第2位上的数归位,第三趟将倒数第3位上的数归位,依此归推,最后一趟不用再归位,因为第1位已经归好位
/// 时间复杂度:最坏情况是O(n的平方) 最好情况是O(n)
/// 优化:增加一个标识变量,当比较序列为{2,1,3,4,5,6,7,8,9,10},只需要进行一次比较即可,时间复杂度为O(n)
/// </summary>
/// <param name="array"></param>
static void BubbleSort(int[] array)
{
bool flag = true;
for (int i = 0; i < array.Length && flag; i++)
{
flag = false;
//如果j从0开始则array[j]<array[j+1] j+1会越界
for (int j = 1; j < array.Length - i; j++)
{
Console.WriteLine(string.Format("i={0},j={1}",i,j));
if (array[j-1] > array[j])
{
var t = array[j - 1];
array[j - 1] = array[j];
array[j] = t;
flag = true;
}
}
}
Console.WriteLine("冒泡排序后的结果是:");
foreach (var item in array)
{
Console.WriteLine(item);
}
}