yuyi
知不可乎骤得,托遗响于悲风
选择排序是一种基本的排序算法,它通过在每次迭代中选择剩余元素中的最小(或最大)元素,并将其放到已排序序列的末尾来工作。在选择排序中,我们同样看到两层循环,每层循环的作用和次数具有其特定的逻辑和意义。
外层循环的变量通常被称为 i
,这个循环控制选择过程的次数。对于一个包含 n
个元素的数组,最多只需要进行 n-1
次选择来完成排序。这是因为当你已经正确放置了 n-1
个元素之后,最后一个元素自然就处于其正确的位置,无需再进行选择和交换。换句话说,进行 n-1
次选择后,整个数组就已经被完全排序了。
内层循环的变量通常被称为 j
,这个循环负责查找从 i+1
到 n
的范围内的最小元素。内层循环从 i+1
开始是因为在每一轮的开始,i
位置之前的所有元素已经被排序好,因此不需要再次考虑它们。这个循环将遍历未排序的部分,查找最小元素的索引。
这里的 n
是因为内层循环需要检查数组中剩余未排序部分的所有元素。对于每一轮,你开始时已经有 i
个元素是排序好的,所以你需要从 i+1
开始,直到数组的末尾 n
,这样可以保证考虑所有可能是当前最小的元素。
在选择排序中:
n-1
,因为最后一个元素无需再选择。选择排序的特点是它不断地选择剩余元素中的最小值,并将它们放在已排序的部分的末尾,这样的操作确保每次迭代后排序的部分都增长一位。虽然它的时间复杂度为 (O(n^2)),对于较小或部分预排序的数据它可以相当高效。
#include <iostream>
using namespace std;
void selectionSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
int minIndex = i;
for (int j = i+1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}