原理
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。一种简单直观的排序算法。
例子
将数组[3,6,4,2,5,1]进行从大到小排序
排序步骤:
第一趟找到最小数1,放到最前边(与首位数字交换)
交换前:| 3 | 6 | 4 | 2 | 5 | 1 |
交换后:| 1 | 6 | 4 | 2 | 5 | 3 |
第二趟找到剩余[6,4,2,5,3]数字里的最小数2,与当前数组的首位数字进行交换
交换前:| 1 | 6 | 4 | 2 | 5 | 3 |
交换后:| 1 | 2 | 4 | 6 | 5 | 3 |
第三趟找到剩余[4,6,5,3]数字里的最小数3,与当前数组的首位数字进行交换
交换前:| 1 | 2 | 4 | 6 | 5 | 3 |
交换后:| 1 | 2 | 3 | 6 | 5 | 4 |
第四趟找到剩余[6,5,4]数字里的最小数4,与当前数组的首位数字进行交换
交换前:| 1 | 2 | 3 | 6 | 5 | 4 |
交换后:| 1 | 2 | 3 | 4 | 5 | 6 |
第五趟找到剩余[5,6]数字里的最小数5,本来就在首位,无须交换
交换前:| 1 | 2 | 3 | 4 | 5 | 6 |
交换后:| 1 | 2 | 3 | 4 | 5 | 6 |
至此,排序完毕,输出最终结果1 2 3 4 5 6
动画演示
代码参考
static void Main(string[] args)
{
int[] intArray = { , , , , , };
Selection_Sort(intArray); foreach (var item in intArray)
{
Console.WriteLine(item);
}
Console.ReadLine();
} static void Selection_Sort(int[] unsorted)
{
int min, temp;
for (int i = ; i < unsorted.Length - ; i++)
{
min = i; // 取得当前数组最小值的位置
for (int j = i + ; j < unsorted.Length; j++)
{
if (unsorted[min] > unsorted[j])
{
min = j;
}
} if (min != i)
{
temp = unsorted[i];
unsorted[i] = unsorted[min];
unsorted[min] = temp;
}
}
}
参考资料