選擇排序法
1.工作原理(算法思路)
- 給定一個待排序數組,找到數組中最小的那個元素
- 如果最小元素不是待排序數組的第一個元素,則將其和第一個元素互換
- 在剩下的元素中,重復1、2過程,直到排序完成。
2.動圖演示
3.C#代碼實現
根據原理設計算法:
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();
}
}
輸出結果
4.性能分析
1)復雜度
2)選擇排序法特點
-
執行的比較和交換次數
比較: N*(N-1)/2
交換: N -
運行時間與輸入無關
在每一次的for循環結束后並不能為下一次的循環提供有效信息。這種性質在某些時候是一種缺陷。在數組大小相同時,當一個幾乎已經有序的數組使用選擇排序法花費的時間和無序數組所花費的時間是一致的。 -
數據的移動量最少
交換的次數和數組的大小呈線性關系,其他的排序算法對數據移動量都是線性對數級別或平方級別的。