简述
- 每次从序列的无序部分选出最小(或最大)的元素,与序列的无序部分的起始位置的元素交换
- 对于一个待排序的序列,有i、j两个下标。
- i 用来标记序列中还未有序的部分的当前下标(即只会遍历无序部分)。
- j 用来遍历 i~Length-1(即序列无序部分) ,并找出其中最小(或最大)的元素。
特点
- 每次元素交换会立即使得元素被放到正确的位置上,如果某个元素位于正确的最终位置上,则它不会被移动。
- 如果序列中位于正确位置的元素越多,那么该序列用选择排序消耗的时间越小。
选择排序
代码:
class Program
{
static void Main(string[] args)
{
int[] array = { 30, 12, 56, 78, 12125, 56, 44, 212, 45, 787, 21, 22, 56, 65 };
SelectSort(array);
foreach (int item in array)
Console.WriteLine(item);
}
private static void SelectSort(int[] array)
{
int index_min = 0;
for(int i = 0; i <= array.Length-2; i++)
{
index_min = i;
int j = 0;
for(j = i+1; j <= array.Length-1; j++)
{
if(array[j] < array[index_min])
{
index_min = j;
}
}
Swap(ref array[i], ref array[index_min]);
}
}
private static void Swap(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
}
执行结果:
12
21
22
30
44
45
56
56
56
65
78
212
787
12125