arrays - C 更新数组
问题描述
关于这个问题 - https://www.geeksforgeeks.org/arrange-given-numbers-form-biggest -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}。
解决方案
if (newArrayWithSamePower[j] > newArrayWithSamePower[i]) {
int temp2 = newArrayWithSamePower[i];
newArrayWithSamePower[i] = newArrayWithSamePower[j];
newArrayWithSamePower[j] = temp2;
如果您不在newArrayWithSamePower
循环内交换数组的元素,那么在不同的索引上,if (newArrayWithSamePower[j] > newArrayWithSamePower[i])
条件将为真,因此array
将以不同的方式交换。该算法在原地工作 - 它必须修改元素才能正常工作。