1

私は選択ソートに取り組んでいます。

私の問題は、「void sort」からすべてのコードを削除すると、プログラムが実行されることです。すべてのコードを元に戻すとすぐに、「voidsort」は「voidsort」の最初の「printf」関数に到達しません。何がすべてをぶら下げているのかわかりません。

ここでの2番目の問題は、この関数がこれを実行する必要があることです。

それらのarray[]をvars:x(開始点)temp(一時的な最小数)およびk(現在の数)で実行します。反復ごとに、xから開始し、temp = xを設定し、k =( x + 1)次に、配列の最後に到達するまでk++。array[k]がarray[temp]より小さい場合は、tempをkに設定する必要があります。そして最後に:array[x]とarray[temp]を交換し、(x + 1)からやり直します

以前は機能していたとき、私が得た唯一の結果はx = 7(リストの最後)であり、最後の数値のみが出力されました。:/ wat do

また、必要ではありませんが、void関数からソートされた配列をどのように返すのですか?グローバル変数?他に何か?

#include <stdio.h>
#define SIZE 8

void sort(int array[], int size)
{
    printf("starting sort, declaring vars...");
    int temp, placeholder, x, k;
    printf("setting x...");
    x = 0;
    printf("size(%d), i(%d)", size, x);
    printf("starting sort loop...");
    while (x < (size - 1));
    {
        k = (x + 1);
        temp = x;
        while(k < size)
        {
            if(array[k] < array[temp])
                temp = k;
            k++;
        }
        printf("array[%d] is %d from array[%d]\n", x, array[temp], temp);
        placeholder = array[temp];
        array[temp]= array[x];
        array[x] = placeholder;
        printf("%d ", array[x]);
        x++;
    }
    printf("\n");
}

int main(void)
{
    int numbers[SIZE] = {4, 15, 16, 50, 8, 23, 42, 108 };
    int i;
    for (i = 0; i < SIZE; i++)
        printf("%d ", numbers[i]);
    printf("\ncounted and sorting...\n");
    sort(numbers, SIZE);
    for (int i = 0; i < SIZE; i++);
        printf("%d", numbers[i]);
    printf("\n");
    return 0;
}
4

1 に答える 1

2

これが質問の書き方やコードの間違いだったかどうかはわかりませんが、

while (x < (size - 1));

間違っている。それは何もしないので、無限にループします。目的の効果を得るためにセミコロンを取り出します。同様に、

for (int i = 0; i < SIZE; i++);

そのセミコロンはありません。iまた、適切なCで宣言することはできず、iすでに宣言されているため、そのままにしておくことをお勧めしますfor (i = 0; ...

于 2013-03-25T18:01:30.453 に答える