2

我是c的初学者。并且对在 python 中非常容易的二维数组有点困惑。假设我声明了一个数组 [100][2] 并读取它们的值。然后我只想通过一维对元素进行排序。如果我不能说清楚,这是在 python 中完美运行的代码(这个逻辑)。但在 c 中,它在排序时会出错。

int array[100][2],i,j,n=50,temp[1][2];
for(i=0;i<n;i++){
    scanf("%d %d",&list[i][0],&list[i][1]);
}
/*heres's the sorting part which gives error*/

for(i=0;i<n-1;i++){
    for(j=i+1;j<n;j++){
        if(list[j][1]>list[i][1]){
            temp=list[i];
            list[i]=list[j];
            list[j]=temp;
        }
    }
}

那么C中的正确方法应该是什么?如果你不明白我的问题,请评论!

4

1 回答 1

3

除了用于交换二元素数组的部分外,您的代码很干净。有两种方法可以修复它:

  • 使用数组的替代表示 -在这种情况下,int *array[100]您需要使用单个元素,或者mallocfree
  • 用于memcpy在交换代码中交换二元素数组。
  • 只需交换两个元素,您可以一次交换一个整数的两个元素数组,而无需使用memcpy

这是一种方法:

int temp[2];
memcpy(temp, list[i], sizeof(temp));
memcpy(list[i], list[j], sizeof(temp));
memcpy(list[j], temp, sizeof(temp));
于 2012-11-18T13:07:57.237 回答