0
我已經寫了函數,它對給定數組進行冒泡排序,並在數組已經排序時停止執行。C - 氣泡排序減少循環量
int sort(int *arr, int size) {
int i, j, temp, st = 1, count = 0;
for(i = 0; (i < size - 1) && (st == 1); i++)
{
st = 0;
for(j = 0; j < size - 1; j++)
{
if(arr[j] < arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
st = 1;
}
count++;
}
}
return count;
}
正如你所看到的,當數組在大小^ 2移動之前被排序時,循環應該被破壞。
但是,有些事情是錯誤的,count變量始終是size * size,無論我傳遞什麼數組,甚至{1,2,3,4,5}都會得到相同的結果。
出了什麼問題?
我以爲他在談論計數值。 –
是的,但是當內部循環不交換時,外部循環會中斷,所以如果數組按照期望的順序排序,則只有一個循環通過外部循環。 –
這很有趣,感謝分享。但我不明白,爲什麼數組排序時外循環沒有中斷,「if」沒有執行,並且st爲0. – user1615069