-
选择排序:
-
给定 N 个项目和 L = 0 的数组,选择排序将:
-
在 [L ... N-1] 范围内找出最小项目 X 的位置,
-
用第 L 项交换X,
-
将下限 L 增加1并重复步骤1直到 L = N-2。
-
-
在不失普遍性的情况下,我们也可以实现反向的选择排序:找到最大项目 Y 的位置并将其与最后一个项目交换。
-
-
代码:
void SelectionSort(int *arr, int num)
{
int ret = 0;
int sorted, index, min_index;
int tmp = 0;
for (sorted = 0; sorted <= num - 2; sorted++) { // L
min_index = sorted;
for (index = sorted; index < num; index++) { // [L...N-1]
if (arr[min_index] > arr[index]) {
min_index = index;
}
printf("%2d-%2d\n", sorted, index);
}
if (min_index != sorted) {
printf("[%2d<->-%2d]: %2d <--> %2d\n", sorted, min_index, arr[sorted], arr[min_index]);
tmp = arr[sorted];
arr[sorted] = arr[min_index];
arr[min_index] = tmp;
}
}
return;
}