简单选择排序(Simple SelectSort)算法的基本思想是:从待排序的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第一个记录交换位置;然后从不包括第一个位置上的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第二个记录交换位置;如此重复,直到序列中只剩下一个记录为止。
设待排序的顺序表sqList中有n个记录,简单选择排序要进行n-1趟,第1趟从n个记录选择关键码最小(或最大)的记录并与第1个记录交换位置;第2趟从第2个记录开始的n-1个记录中选择关键码最小(或最大)的记录并与第2个记录交换位置。一般地,第i趟从第i个记录开始的n-i+1个记录中选择关键码最小(或最大)的记录并与第i个记录交换位置,所以,第n-1趟比较最后两个记录选择关键码最小(或最大)的记录并与第n-1个记录交换位置。
public void SimpleSelectSort(SeqList<int> sqList)
{
int tmp = 0;
int t = 0;
for (int i = 0; i < sqList.Last; ++i)
{
t = i;
for (int j = i + 1; j <= sqList.Last; ++j)
{
if (sqList[t] > sqList[j])
{
t = j;
}
}
tmp = sqList[i];
sqList[i] = sqList[t];
sqList[t] = tmp;
}
}
在简单选择排序中,第一次排序要进行n-1次比较,第二次排序要进行n-2次比较,第n-1排序要进行1次比较,所以总的比较次数为:
在各次排序时,记录的移动次数最好0次,最坏为3次,所以,总的移动次数最好为0次,最坏为3次。因此,简单选择排序算法的时间复杂度为O(n2)。
简单选择排序算法只需要一个辅助空间用于交换记录,所以,简单选择排序算法是一种稳定的排序方法。