首页 > 解决方案 > C 更新数组

问题描述

关于这个问题 - https://www.geeksforgeeks.org/arrange-given-numbers-form-b​​iggest -number-set-2/

出于某种原因,如果我不更新第二个数组中的元素,则第一个数组中的元素不会相应地更新。

int array[] = {1, 34, 3};

int newArrayWithSamePower[3] = {11, 34, 33};

// Sort initial array based on power array elements
for (int i = 0; i <= 2; i++) {
    for (int j = i + 1; j <= 2; j++) {
        if (newArrayWithSamePower[j] > newArrayWithSamePower[i]) {
            int temp2 = newArrayWithSamePower[i];
            newArrayWithSamePower[i] = newArrayWithSamePower[j];
            newArrayWithSamePower[j] = temp2;

            // Unsure why array indexes go haywire if you dont update power array
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
            
        }
    }
}

for (int i = 0; i <= tempIndex; i++) {
    printf("%d\n", array[i]);
}

预期输出:{34, 3, 1}

但是,如果我不更新功率数组,输出将变为 {3, 1, 34}。

标签: arrayscsorting

解决方案


    if (newArrayWithSamePower[j] > newArrayWithSamePower[i]) {
        int temp2 = newArrayWithSamePower[i];
        newArrayWithSamePower[i] = newArrayWithSamePower[j];
        newArrayWithSamePower[j] = temp2;

如果您不在newArrayWithSamePower循环内交换数组的元素,那么在不同的索引上,if (newArrayWithSamePower[j] > newArrayWithSamePower[i])条件将为真,因此array将以不同的方式交换。该算法在原地工作 - 它必须修改元素才能正常工作。


推荐阅读