C# 排序演算法之氣泡排序
阿新 • • 發佈:2020-11-24
本文用控制檯程式展示資料排序前後的變化
1. 準備arr資料 及 arr資料的展示
/// <summary> /// 生成n個元素的int陣列 /// </summary> /// <param name="n"></param> /// <param name="Min"></param> /// <param name="Max"></param> /// <returns></returns> staticint[] 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. 氣泡排序, 這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端(升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名“氣泡排序”。
原理:
-
比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
-
對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
-
針對所有的元素重複以上的步驟,除了最後一個。
- 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
#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(); }