1. 程式人生 > 實用技巧 >C# 排序演算法之氣泡排序

C# 排序演算法之氣泡排序

本文用控制檯程式展示資料排序前後的變化

1. 準備arr資料 及 arr資料的展示

        /// <summary>
        ///  生成n個元素的int陣列
        /// </summary>
        /// <param name="n"></param>
        /// <param name="Min"></param>
        /// <param name="Max"></param>
        /// <returns></returns>
        static
int[] GetArrayData(int n, int min, int max) { Random random = new Random(); int[] arr = new int[n]; for (int i = 0; i < arr.Length; i++) { arr[i] = random.Next(min, max); } return arr; }
/// <summary> /// 展示arr陣列資料內容 /// </summary> /// <param name="arr"></param> /// <returns></returns> static string ShowArray(int[] arr) { string str = string.Join(" ", arr); return str; }

2. 氣泡排序, 這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端(升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名“氣泡排序”。

原理:

  1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
  2. 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
  3. 針對所有的元素重複以上的步驟,除了最後一個。
  4. 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
        #region 氣泡排序
        /// <summary>
        /// 氣泡排序
        /// </summary>
        /// <param name="arr"></param>
        /// <returns></returns>
        static int[] BubbleSort(int[] arr)
        {
            for (int i = 0; i < arr.Length-1; i++)//3. 針對所有元素遍歷,逐一找出未排序數中的最大數
            {
                for (int j = 0; j < arr.Length -1-i; j++)// 2.比較遍歷後,比較數中最大值的位置排在(這些未排序比較數)的最後
                {
                    if (arr[j] > arr[j + 1])//1.比較相鄰兩元素:如果第一個比第二個大,則交換它們的位置
                    {
                        var temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
            return arr;
        }

3. 程式呼叫

 static void Main(string[] args)
        {
            Console.WriteLine($"資料演算法");
            var arr1=  GetArrayData(8, 1, 22);
            Console.WriteLine($"生成未排序資料:{ShowArray(arr1)}");
            var arr2 = BubbleSort(arr1);
            Console.WriteLine($"氣泡排序:{ShowArray(arr2)}");

            Console.ReadLine();
        }