public static void SelectSort(int[] array)
{
for (int i = 0; i <array.Length-1 ; i++)//最后一个位置不需再去排序了, 前面已经排序好了,交换了最后一个放的就是最大的
{
int min = array[i];
int minIndex = i;
for (int j = i+1; j <array.Length; j++)//从i+1开始 进行和 最小相比, 找出最小的 位置
{
if (array[j]<min)
{
minIndex = j;
min = array[j];
}
}
//如果 i 没变过不需要交换,说明i就是最小 的了
if (minIndex!=i)
{
int temp = array[minIndex];
array[minIndex] = array[i];
array[i] = temp;//最小的放在 i位置
}
}
}
选择排序是依次 从一组数组中 选出 最大/最小的值放在数组 首端 或者 末尾,从而让整个数组为 升序或者降序的算法。
先是 从拿 数组中 下标为i 的元素 作为最小值 进行与 i 后面的值进行比较。用min 和 minindex 记录他们, 遇到比它小的,存下最小值,和下标。 内部循环过后,判断是否 最小值下标是否是原来的下标,不是 就进行交换,依次进行,直到是有序的。
简单选择排序(Simple Select Sort)算法的基本思想是:从待排序的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第一个记录交换位置;然后从不包括第一个位置上的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第二个记录交换位置;如此重复,直到序列中只剩下一个记录为止
下面也是 一样的。
public static void SelectSort2(int[] array)
{
for (int i = 0; i <array.Length-1; i++)//最后一个元素不需要排序了
{
int min = array[i];
int minIndex = i;
for (int j = array.Length-i-1; j>i; j--)
{
if (array[j]<min)
{
min = array[j];
minIndex = j;
}
}
if (i!=minIndex)
{
int temp = array[minIndex];
array[minIndex] = array[i];
array[i] = temp; //i 存放最小 元素 依次。遍历
}
}
}