冒泡排序的思想就是不断地交换,通过交换完成最终排序。我们可不可以像只有在时机非常明确到来时才出手,也就是排序找到合适的关键字在做交换,并且只移动一次就完成相应的排序定位工作?这就是选择排序的基本思想。
选择排序是每一趟在 n - i + 1(i = 1,...,n-1)个记录中选取关键字最小的记录作为有序序列的第 i 个记录。
代码:
简单的选择排序法(Simple Selection Sort)就是通过 n-i 次关键字之间的比较,从 n-i+1个记录中选出关键字最小的记录,并和第 i 个记录交换。
void SelectionSort(SqList *L) {
int i,j,min;
for (int i = 1; i < L->length; i++) {
min = i; // 当前下标定义为最小值下标
for(int j = i + 1;j<L->length;j++) // 循环i之后的数据
{
if (L->r[min]>L->r[j]) { // 如果有小于min这个关键字的记录
min = j; // 把关键字的下标赋值给min
} // Of if
} // Of for j
if (i!=min) { // 说明min已经更新,变了
swap(L,i,min);
} // Of if
} // Of for i
} // Of SelectionSort
尽管冒泡排序和简单排序的时间复杂度都是O(n^2),但是选择排序性能还是要好一点。