C#實現(xiàn)——十大排序算法之選擇排序
選擇排序法
1.工作原理(算法思路)
給定一個待排序數(shù)組,找到數(shù)組中最小的那個元素
如果最小元素不是待排序數(shù)組的第一個元素,則將其和第一個元素互換
在剩下的元素中,重復1、2過程,直到排序完成。
2.動圖演示

3.C#代碼實現(xiàn)
根據(jù)原理設計算法:
class Program{//選擇排序法private static void chooseSort(int[] array){//第一個for循環(huán):每一次循環(huán)完成后得到的當前的最大元素都與第i位做交換for (int i = 0; i < array.Length; i++){//min為最小元素的索引int min = i;//第二個for循環(huán):將當前的array[j]與array[min]作比較,如果array[j]更小,則替換min的當前索引for (int j = i + 1; j < array.Length; j++){if (array[min] > array[j]){min = j;}}//當?shù)诙€for循環(huán)完成時,array[min]中存儲的就是當前最小元素//將array[min]與array[i]交換int temp = array[i];array[i] = array[min];array[min] = temp;}}//打印輸出數(shù)組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();}}
輸出結果
4.性能分析
1)復雜度

2)選擇排序法特點
執(zhí)行的比較和交換次數(shù)
比較:N*(N-1)/2
交換:N運行時間與輸入無關
在每一次的for循環(huán)結束后并不能為下一次的循環(huán)提供有效信息。這種性質在某些時候是一種缺陷。在數(shù)組大小相同時,當一個幾乎已經(jīng)有序的數(shù)組使用選擇排序法花費的時間和無序數(shù)組所花費的時間是一致的。數(shù)據(jù)的移動量最少
交換的次數(shù)和數(shù)組的大小呈線性關系,其他的排序算法對數(shù)據(jù)移動量都是線性對數(shù)級別或平方級別的。
評論
圖片
表情
