2

私はcの初心者です。Pythonではかなり簡単だった2次元配列について少し混乱しました。array[100][2] を宣言して、それらの測定値を取得するとします。次に、要素を1つの次元のみでソートしたいと思います。私が自分自身を明確にすることができなかった場合、これは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

2 要素配列の交換に使用する部分を除いて、コードはクリーンです。これを修正するには、次の 2 つの方法があります。

  • 配列の別の表現を使用しint *array[100]ます。その場合、個々の要素を使用する必要がありますmallocfreeまたは
  • memcpyスワップ コードで 2 要素配列を交換するために使用します。
  • スワップする要素が 2 つだけなので、使用せずに一度に 1 つの整数で 2 つの要素の配列を交換できます。memcpy

これはそれを行う1つの方法です:

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 に答える