根據原理設計算法:算法
class Program { //選擇排序法 private static void chooseSort(int[] array) { //第一個for循環:每一次循環完成後獲得的當前的最大元素都與第i位作交換 for (int i = 0; i < array.Length; i++) { //min爲最小元素的索引 int min = i; //第二個for循環:將當前的array[j]與array[min]做比較,若是array[j]更小,則替換min的當前索引 for (int j = i + 1; j < array.Length; j++) { if (array[min] > array[j]) { min = j; } } //當第二個for循環完成時,array[min]中存儲的就是當前最小元素 //將array[min]與array[i]交換 int temp = array[i]; array[i] = array[min]; array[min] = temp; } } //打印輸出數組 private static void printArray(int[] array) { foreach (int item in array) { Console.Write(item + "\t"); } Console.WriteLine(); } static void Main(string[] args) { int[] array = new int[10] { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; printArray(array); chooseSort(array); printArray(array); Console.ReadKey(); } }
輸出結果
數組
執行的比較和交換次數
比較: N*(N-1)/2
交換: N性能
運行時間與輸入無關
在每一次的for循環結束後並不能爲下一次的循環提供有效信息。這種性質在某些時候是一種缺陷。在數組大小相同時,當一個幾乎已經有序的數組使用選擇排序法花費的時間和無序數組所花費的時間是一致的。設計
數據的移動量最少
交換的次數和數組的大小呈線性關係,其餘的排序算法對數據移動量都是線性對數級別或平方級別的。code