using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//选择排序说明
//原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
//算法过程如下:
//找到列表中的最小值,
//把它和第一个位置的元素交换,
//列表其余部分重复上面的步骤(从第二个位置开始,且每次加1).
//列表被有效地分为两个部分:从左到右的有序部分,和余下待排序部分。
namespace _07选择排序
{
class Program
{
static void Main(string[] args)
{
List<int> arrayToSort = new List<int>() { 12, 4654, 789, 1, 456, 174, 6, 54, 9 };
int min;
for (int i = 0; i < arrayToSort.Count; i++)
{
//假设最小值的索引为i
min = i;
//for循环找到剩余数的最小值索引
for (int j = i + 1; j < arrayToSort.Count; j++)
{
if (((IComparable)arrayToSort[j]).CompareTo(arrayToSort[min]) < 0)
{
//替换最小值索引
min = j;
}
}
int temp = arrayToSort[i];
arrayToSort[i] = arrayToSort[min];
arrayToSort[min] = temp;
}
#region 遍历输出数组
for (int i = 0; i < arrayToSort.Count; i++)
{
Console.Write(arrayToSort[i].ToString() + ",");
}
Console.ReadKey();
#endregion
}
//上面的实现基于该算法实现
public IList SelectionSort(IList arrayToSort)
{
int min;
for (int i = 0; i < arrayToSort.Count; i++)
{
min = i;
for (int j = i + 1; j < arrayToSort.Count; j++)
{
if (((IComparable)arrayToSort[j]).CompareTo(arrayToSort[min]) < 0)
{
min = j;
}
}
object temp = arrayToSort[i];
arrayToSort[i] = arrayToSort[min];
arrayToSort[min] = temp;
//RedrawItem(i);
//RedrawItem(min);
//pnlSamples.Refresh();
//if (chkCreateAnimation.Checked)
// SavePicture();
}
return arrayToSort;
}
}
}
09-01