相鄰元素兩兩比較,大者後移,每輪將最大值「冒泡」至末端。加入 done 標誌優化:若某輪無交換則提前結束。
using System;
namespace BubbleSorter
{
public class BubbleSorter
{
public void Sort(int[] list)
{
int i, j, temp;
bool done = false;
j = 1;
while ((j < list.Length) && (!done))
{
done = true;
for (i = 0; i < list.Length - j; i++)
{
if (list[i] > list[i + 1])
{
done = false;
temp = list[i];
list[i] = list[i + 1];
list[i + 1] = temp;
}
}
j++;
}
}
}
public class MainClass
{
public static void Main()
{
int[] iArray = new int[] { 1, 5, 13, 6, 10, 55, 99, 2, 87, 12, 34, 75, 33, 47 };
BubbleSorter sh = new BubbleSorter();
sh.Sort(iArray);
for (int m = 0; m < iArray.Length; m++)
Console.Write("{0} ", iArray[m]);
Console.WriteLine();
}
}
}
1 2 5 6 10 12 13 33 34 47 55 75 87 99