选择排序说明

Selection Sort Explanation

我一直在研究 C 中的递归函数,它接受一个 int 数组及其大小,并进行选择排序,现在数组应该从最小到最大排序:

void selection_sort(int integers[], size_t size)
{
    if (size == 0) {
        return;
    }

    int largest = 0;
    int largest_index = 0;
    int temp;

    for (int i = 0; i < size; ++i) {
        if (integers[i] > integers[largest_index]) {
            largest_index = i;
        }
    }
    temp = integers[largest_index];
    integers[largest_index] = integers[size - 1];
    integers[size - 1] = temp;

    selection_sort(integers, size - 1);
}

因此,如果整数包含 17、8、14、25 和 11,在调用 selection_sort 后,它现在将包含 8、11、14、17 和 25。代码可以正常工作,但是,我试图在纸上找出逻辑,但我认为我没有正确考虑它,因为我没有得到我应该得到的数字。我想知道是否有人可以逐步彻底解释函数的逻辑。如有任何帮助,我们将不胜感激!

让我们分解您的代码以了解其工作流程。

你的函数有两个参数,一个是数组,另一个是数组的大小

selection_sort(int integers[], size_t size)

第二部分,如果数组的大小为零则 return

if (size == 0) {
        return;
    }

第三部分,定义变量

int largest = 0; //this variable is not used
int largest_index = 0; //this is index for largest array value
int temp; //temporary variable for swapping 

第四部分查找数组中的最大值索引

for (int i = 0; i < size; ++i) { //Iterate array from 0 to size
        if (integers[i] > integers[largest_index]) { /*check if current index value is greater than largest value index */
            largest_index = i; /* if value is greater than current index value add index in largest_index variable */
        }

在数组 [17, 8, 14, 25, 11] 的第一次迭代中 largest_index 将是 3 (25)。

第五部分,交换数组的最高值和最后一个元素

[17, 8, 14, 25, 11] 将变为 [17, 8, 14, 11, 25]

 temp = integers[largest_index]; //take 25 in temp
    integers[largest_index] = integers[size - 1]; 
    integers[size - 1] = temp; //swap 11 with 25

最后一部分,递归调用函数,数组大小减少1个元素

示例在第一次迭代数组将 [17, 8, 14, 11] 和第二次迭代 [11, 8, 14] 中,它将不断减小数组大小直到它 returns(大小变为零)

selection_sort(integers, size - 1);