0

特定の行列を昇順 (すべての要素) で並べ替える必要があります。

与えられた行列が

2  0  4  -1
-3 1  5   5
6  4  4   9
-5 8  10  12

ソートされた行列は次のようになります。

-5  -3  -1  0 
1   2   4   4
4   5   5   6
8   9   10  12

私のコードは悪い結果をもたらします。

k=0 w=0 の場合は問題ありませんが
、k=0 w=1 をカウントし
ますが、w=j を w=j に置き換える必要があるため、k=1 w=0 をチェックせずに k=1 w=1ジャンプします。それを修正する何かが、私はそれを置き換えるものがわからない

私のコード:

#include <stdio.h>
#include <stdlib.h>

#define n 2

int main()
{
    int arr[n][n],min,i,j,tmp,y,k,w,z=0,q=0;
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
        {
            printf("Enter number: ");
            scanf("%d",&arr[i][j]);
        }

    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
        {
            min=arr[i][j];
            for(k=i;k<n;k++)
            {
                for(w=j;w<n;w++)
                if(arr[k][w]<min)
                {
                    min=arr[k][w];
                    z=k;
                    q=w;
                }
                w=0;
            }
            tmp=arr[i][j];
            arr[i][j]=min;
            arr[z][q]=tmp;
        }

    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            printf("%d ",arr[i][j]);
        printf("\n");
    }
}
4

2 に答える 2

1

追加の問題があります(デューケリングの方法は他の問題に合っています)。

すべてのループの終わりで、 to の値を代入しarr[i][j]ますarr[z][q]。より小さな要素が見つからず、前のループの値を保持している場合は、スワップ (または代入) を行いますz。実際の ( ) 要素qよりも小さい要素が見つかったかどうかを確認する必要があります。arr[i][j]

最も良くない解決策:

if ( arr[z][q] < arr[i][j] )
{
    tmp=arr[i][j];
    arr[i][j]=min;
    arr[z][q]=tmp;
}
于 2013-05-26T19:01:19.487 に答える