1. 程式人生 > >數據結構與算法基礎 模塊六

數據結構與算法基礎 模塊六

format ati lis -i bubble 選擇排序 append tarray length

簡單選擇排序:

設所排序序列的記錄個數為n。i取1,2,…,n-1,從所有n-i+1個記錄(R,R[i+1],…,R[n]中找出排序碼最小的記錄,與第i個記錄交換。執行n-1趟 後就完成了記錄序列的排序。

代碼如下:


public void SimpleSelect() { int[] inputIntArray = new int[8] { 8, 4, 7, 5, 2, 3, 6, 1 }; for (int i = 1; i < inputIntArray.Length; i++) { int t = i - 1; for (int j = i; j < inputIntArray.Length; j++) { if (inputIntArray[t] > inputIntArray[j]) { t = j; } } int temp = inputIntArray[t]; inputIntArray[t] = inputIntArray[i - 1]; inputIntArray[i - 1] = temp; PrintSortedResult(inputIntArray, i); } } public void PrintSortedResult(int[] inputIntArray, int num) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < inputIntArray.Length; i++) { if (i == 0) { sb.Append(inputIntArray[i].ToString()); } else { sb.Append("," + inputIntArray[i].ToString()); } } Console.WriteLine("第" + num + "次排序的結果: " + sb.ToString() + ""); }

冒泡排序

1:原理

以此比較相鄰的兩個元素,每次比較完畢最大的一個字跑到本輪的末尾。
目的:按從小到大排序。
方法
假設存在數組:72, 54, 59, 30, 31, 78, 2, 77, 82, 72
第一輪比較相鄰兩個元素,如果左邊元素大於右邊元素,則交換。
72和54比較的結果就是,54在前,72在後;
然後72和59比較的結果,59在前,72在後;
以此類推,第一輪比較之後的結果是:54, 59, 30, 31, 72, 2, 77, 78, 72, 82
經過第一輪比較,最大的元素跑到了最後一個,所以第二輪比較,最後一個元素不需要進行比較了。
第二輪還是從索引0和1開始比較,只是不許要比較最後一個了,算法還是一樣的。第三輪、第四輪以此類推。
排序之後的結果:2, 30, 31, 54, 59, 72, 72, 77, 78, 82

2:代碼


static List<int> list = new List<int>() { 72, 54, 59, 30, 31, 78, 2, 77, 82, 72 }; static void Main(string[] args) { Bubble(); PrintList(); } static void Bubble() { int temp = 0; for (int i = list.Count; i > 0; i--) { for (int j = 0; j < i - 1; j++) { if (list[j] > list[j + 1]) { temp = list[j]; list[j] = list[j + 1]; list[j + 1] = temp; } } PrintList(); } } private static void PrintList() { foreach (var item in list) { Console.Write(string.Format("{0} ", item)); } Console.WriteLine(); }

數據結構與算法基礎 模塊六