直接选择排序
直接选择排序是一种选择排序,是一种不稳定的排序,时间复杂度为 O(n^2)。
基本思想
每一趟从待排序的数据元素中选出最小的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
40 10 20 15
①{10} 40 20 15 将第一个元素 40 和无序区中最小的 10 交换
②{10 15} 20 40 将第二个元素 40 和无序区中最小的 15 交换
③{10 15 20} 40 将第三个元素 20 已是无序区中最小不用交换
④{10 15 20 40} 到倒数第二个元素结束
例子
using System;
using System.Collections;
namespace System
{
public class Test
{
public static void Main()
{
int[] array = new int[6] { 40, 10, 20, 15, 35, 20 };
SelectionSort.Sort(array);
PrintArray(array);
Console.ReadKey();
}
public static void PrintArray(int[] array)
{
for (int i = 0; i < array.Length; i++)
{
if (i > 0) Console.Write(" ");
Console.Write(array[i].ToString());
}
Console.WriteLine();
}
}
public class SelectionSort
{
public static void Sort(int[] sortArray)
{
// 从起始元素开始选到倒数第二个元素
for (int i = 0; i < sortArray.Length - 1; i++)
{
int min = i;
for (int j = i + 1; j < sortArray.Length; j++) // 循环无序区,找到最小元素的下标 min
{
if (sortArray[j] < sortArray[min])
{
min = j;
}
}
// 将从无序区选出的最小元素和当前待处理的有序区交换
if (i != min)
{
Swap(ref sortArray[i], ref sortArray[min]);
}
}
}
private static void Swap(ref int a, ref int b)
{
int t;
t = a;
a = b;
b = t;
}
}
}



