我是相當新的C和編程一般,和我有一個關於在以下冒泡排序功能循環問題:試圖瞭解冒泡功能
void sort(int values[], int n);
{
int c, d, t;
for (c = 0; c < (n - 1); c++)
{
for (d = 0; d < c - n - 1; d++)
{
if (values[d] > values[d + 1])
{
t = values[d];
values[d] = values[d + 1];
values[d + 1] = t;
}
}
}
}
說我特別想了解的部分是用於循環所述第二:
for (d = 0; d < c - n - 1; d++)
據我所知,功能是通過陣列每次迭代,最多比較並排側的值,直到最後排序元件和冒泡的最大元素到所述陣列的所述端;然而,我似乎無法將我的頭圍繞在:
while d < c - n - 1;
以及它如何轉換。當我在腦海裏玩這個時,我想象的是,在第一次循環時,c-n-1等於0 0在我看來,由於c總是小於n - 1,從c中減去n - 1總是會導致小於0的值,並且d永遠不會小於0,所以永遠不會執行。我知道我只是看着這個錯誤,當答案被提出時,可能會有一個'嘟嘟'的時刻,但是這讓我很困擾。
如果我把第一個for循環放入單詞中,它說:while c小於數組的長度,執行這個循環的內容然後遞增c。有人能以類似的方式將第二個循環放入單詞中,解釋d < c - n - 1的含義嗎?
此代碼不起作用。它從哪裏來的?認爲它起作用的基礎是什麼? – hvd
是的,代碼不起作用,因爲第二個循環從不迭代。我認爲第二個循環中的正確條件是'd