#include <stdio.h>
void testSort(int values[], int n);
int main(void)
{
int hs[] = {5,3,2,1,4};
printf("Unsorted: %i %i %i %i %i\n", hs[0], hs[1], hs[2], hs[3], hs[4]);
testSort(hs, 5);
printf("Sorted: %i %i %i %i %i\n", hs[0], hs[1], hs[2], hs[3], hs[4]);
}
void testSort(int values[], int n)
{
for (int i = 0; i < n-1; i++)
{
int hold;
int current = values[i];
int next = values[i + 1];
if (current > next)
{
hold = current;
current = next;
next = hold;
}
}
return;
}
私はバブルソートをやろうとしていると、今一度配列を通過するが、私の質問です:なぜ私ではありませんhs[]
関数呼び出し後の更新?第2のprintf
は、それが同じままであることを示しています。
EDIT: 述べたように、私はデータを変更することなく、コピーのが判明しました。私は、変数を作成したとき、彼らはvalues[i]/values[i+1]
を表現されたが、現実には、私はちょうど新しい変数を作成し、5とcurrent
に割り当てるあるvalues[0]
の値を渡したかのように何らかの理由で私はcurrent/next
私は感じました。明らかに値[]を変更しないままにする。みんなありがとう
'values [i]'と 'values [i + 1] 'を入れ替える必要があります。すべてのコードは、コピーを 'current'と' next'に入れ替えています。 – user3386109
あなたの関数は 'values [i]'をどこでも変更しません。 – melpomene
@Fang配列を値渡しすることはできません。配列は最初の要素へのポインタになります。 – Quentin