5

2次元配列を並べ替えようとしています。元の配列は

5 0 3
4 1 2
3 1 1
4 2 2
3 3 1

並べ替えると、次のようになります

3 1 1
3 3 1
4 2 2
4 1 2
5 0 3

これが私がバブルソートを実装するために使用したコードです。私は行数を表します。

int x,y,z,j,temp1,temp2,temp3;
for(x=0;x<i;x++)
{
    for (j=0;j<i-1;j++)
    {
        if(a[j][0]>a[j+1][0])
        {
            temp1=a[j][0];
            temp2=a[j][1];
            temp3=a[j][2];
            a[j][0]=a[j+1][0];
            a[j][1]=a[j+1][1];
            a[j][2]=a[j+1][2];
            a[j+1][0]=temp1;
            a[j+1][1]=temp2;
            a[j+1][2]=temp3;
        }
    }
}

それはまだ分類されません、どんな助けでも大いに感謝されます。

4

2 に答える 2

3

配列の行を辞書式順序で並べ替えようとしているようです。2D配列を配列の配列として扱う場合は、第1レベルの配列内の第2レベルの配列を辞書式順序の昇順で並べ替えているだけです。

配列の列数が固定されているかどうかによってはqsort、カスタムコンパレータの関数を使用してこれを実行できる場合があります。たとえば、各列に常に正確に3つの要素があることがわかっている場合は、次のようなコンパレータを作成できます。

static const size_t NUM_COLS = 3;

/* Lexicographically compare two arrays of size NUM_COLS. */
int CompareArrays(const void* arr1, const void* arr2) {
     /* Convert back to the proper type. */
     const int* one = (const int*) arr1;
     const int* two = (const int*) arr2;

     /* Do an element-by-element comparison.  If a mismatch is found, report how
      * the arrays compare against one another.
      */
     for (size_t i = 0; i < NUM_COLS; i++) {
         if (one[i] < two[i]) return -1;
         if (one[i] > two[i]) return +1;
     }

     /* If we get here, the arrays are equal to one another. */
     return 0;
}

/* Use qsort to sort the arrays */
qsort((const int*)&one, numRows, sizeof(int[NUM_COLS]), CompareArrays);

お役に立てれば!

于 2012-12-30T19:41:22.883 に答える
-1

2D配列をcでソート

int x[5][5],i,j,i1,j1,temp,k;

for (int i=0;i<5;i++)
for (int j=0:<5;j++)
 cin>>x[i][j];


 for (int i=0;i<5;i++)
   for (int j=0:<5;j++)
{
    k=j+1;
            for (int i1=0;i<5;i1++)
            {
                for (int j1=k:<5;j1++)
                    {
                    if (x[i,j]>x[i1,j1])
                        {
                        temp=x[i,j];
                        x[i,j]=x[i1,j1];
                        x[i1,j1]=temp;
                        }
                     }
                k=1;
            }
}


for (int i=0;i<5;i++)
for (int j=0:<5;j++)
 cout<<x[i][j];
于 2013-11-21T19:20:40.737 に答える