1. 程式人生 > >回顧C#經典演算法氣泡排序

回顧C#經典演算法氣泡排序

冒泡演算法的原理:

  • 比較相鄰的兩個數字,如果第一個數字比第二個數字大,則交換它們位置
  • 從開始第一對比較到結尾最後一對,最後一個數字就是最大數
  • 除了最後一個數字,再次從開始第一對比較到最後一對,得出第二大的數字
  • 重複上面操作,直到沒有任何一對數字需要比較

舉例說明:要排序陣列:int[] arr={6,3,8,2,9,1};

第一趟排序:

    第一次排序:6和3比較,6大於3,交換位置: 3 6 8 2 9 1

    第二次排序:6和8比較,6小於8,不交換位置:3 6 8 2 9 1

    第三次排序:8和2比較,8大於2,交換位置: 3 6 2 8 9 1

    第四次排序:8和9比較,8小於9,不交換位置:3 6 2 8 9 1

    第五次排序:9和1比較:9大於1,交換位置: 3 6 2 8 1 9

    第一趟總共進行了5次比較, 排序結果: 3 6 2 8 1 9


第二趟排序:

    第一次排序:3和6比較,3小於6,不交換位置:3 6 2 8 1 9

    第二次排序:6和2比較,6大於2,交換位置: 3 2 6 8 1 9

    第三次排序:6和8比較,6大於8,不交換位置:3 2 6 8 1 9

    第四次排序:8和1比較,8大於1,交換位置: 3 2 6 1 8 9

    第二趟總共進行了4次比較, 排序結果: 3 2 6 1 8 9


第三趟排序:

    第一次排序:3和2比較,3大於2,交換位置: 2 3 6 1 8 9

    第二次排序:3和6比較,3小於6,不交換位置:2 3 6 1 8 9

    第三次排序:6和1比較,6大於1,交換位置: 2 3 1 6 8 9

    第二趟總共進行了3次比較, 排序結果: 2 3 1 6 8 9


第四趟排序:

    第一次排序:2和3比較,2小於3,不交換位置:2 3 1 6 8 9

    第二次排序:3和1比較,3大於1,交換位置: 2 1 3 6 8 9

    第二趟總共進行了2次比較, 排序結果: 2 1 3 6 8 9


第五趟排序:

    第一次排序:2和1比較,2大於1,交換位置: 1 2 3 6 8 9

    第二趟總共進行了1次比較, 排序結果: 1 2 3 6 8 9


最終結果:1 2 3 6 8 9


從上面可以得出:N個數字進行排序,需要經過N-1趟排序,每i趟排序N-i次
使用雙重循壞,外層控制循壞多少趟,內層控制每趟循壞的次數

for (int i = 0; i < list.Length-1; i++)
{
       for (int j = 0; j < list.Length-1-i; j++)
       {
             //交換位置
       }
}

程式碼實現:

using System;

namespace 氣泡排序
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] arr = new[] { 2, 4, 1, 68, 43, 21 };
            int temp = 0;
            for (int i = 0; i < arr.Length - 1; i++)  //外層迴圈控制排序趟數
            {
                for (int j = 0; j < arr.Length - 1 - i; j++)  //內層迴圈控制每一趟排序多少次
                {
                    if (arr[j] > arr[j + 1])
                    {
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }

            foreach (var ar in arr)
            {
                Console.Write(ar + " ");
            }
            Console.ReadLine();

        }
    }
}

實現的氣泡排序: