冒泡排序(Bubble Sort),是一種計算機科學領域的較簡單的排序算法。
它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。
這個算法的名字由來是因為越大的元素會經由交換慢慢“浮”到數列的頂端,故名。
冒泡排序算法的運作如下:
1.比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后的元素應該會是最大的數。
3.針對所有的元素重復以上的步驟,除了最后一個。
4.持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。
下面以一組數組為例:5,4,3,2,1
排列如下:
第一次:
4,5,3,2,1,
4,3,5,2,1
4,3,2,5,1
4,3,2,1,5 交換4次
第二次:
3,4,2,1,5
3,2,4,1,5
3,2,1,4,5 交換3次
第三次:
2,3,1,4,5
2,1,3,4,5 交換2次
第四次:
1,2,3,4,5 交換1次
由此可見:總計排序4(length-1)次,每次排序交換(length-次數-1)。冒泡排序是C#語言雙層循環交換變量的一個事例,通過外層循環控制循環次數,即保證每個元素都進行一次相鄰元素的交換,內層循環從第一個元素開始控制相鄰元素的比較與交換,最終達到整體的比較。
下面通過C#代碼通過接受用戶輸入的數字進行排序:
1 static void Main(string[] args) 2 { 3 //接收用戶輸入 4 Console.WriteLine("請輸入6個正整數:"); 5 int[] myintArray = new int[6]; 6 for (int i = 0; i < myintArray.Length; i++) 7 { 8 myintArray[i] = int.Parse(Console.ReadLine());//循環輸入6個正整數,enter切換 9 } 10 11 //正序排列: 12 for (int i = 0; i < myintArray.Length - 1; i++)//外層循環控制循環次數 13 { 14 for (int j = 0; j < myintArray.Length - i - 1; j++)//內層循環用於交換相鄰要素。 15 { 16 int temp; 17 if (myintArray[j] > myintArray[j + 1]) 18 { 19 temp = myintArray[j + 1]; 20 myintArray[j + 1] = myintArray[j]; 21 myintArray[j] = temp; 22 } 23 } 24 } 25 Console.WriteLine("正序序排列為:"); 26 foreach (int outint in myintArray) 27 { 28 Console.Write(+outint + "\t"); 29 } 30 Console.WriteLine(); 31 //倒序排列為: 32 for (int i = 0; i < myintArray.Length - 1; i++) 33 { 34 for (int j = 0; j < myintArray.Length-i - 1; j++) 35 { 36 int temp; 37 if (myintArray[j] < myintArray[j + 1]) 38 { 39 temp = myintArray[j]; 40 myintArray[j] = myintArray[j + 1]; 41 myintArray[j + 1] = temp; 42 } 43 } 44 } 45 Console.WriteLine("倒序排列為:"); 46 foreach (int outint in myintArray) 47 { 48 Console.Write(outint + "\t"); 49 } 50 51 Console.ReadKey(); 52 }
