特定の配列をバブルソートし、配列が既にソートされている場合に実行を停止する関数を作成しました。
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;
}
ご覧のとおり、size^2 の移動前に配列がソートされると、ループが壊れるはずです。
ただし、何かが間違っており、count 変数は常に size * size であり、渡した配列に関係なく、{1, 2, 3, 4, 5} でも同じ結果が得られます。
なにが問題ですか?