2015-11-22 71 views
1

我想了解最簡單的所有交換算法,bubblesort。然而,我似乎對實際交換價值的步驟相混淆,例如考慮代碼:瞭解氣泡排序(算法)

void bubbleSort(int arr[], int n) { 

     bool swapped = true; 

     int j = 0; 

     int tmp; 

     while (swapped) { 

      swapped = false; 

      j++; 

      for (int i = 0; i < n - j; i++) { 

        if (arr[i] > arr[i + 1]) { 

         tmp = arr[i]; 

         arr[i] = arr[i + 1]; 

         arr[i + 1] = tmp; 

         swapped = true; 

        } 

      } 

     } 

} 

比方說,我有這樣的數字列表:

7 1 3 4 6 3 5 

我想交換前兩個值,第7和1:

通過我的邏輯,這是我如何理解這個代碼:

設置一個臨時變量等於7,那麼

temp = 7; 

組7等於下一個值,所以

7 = 1;? 在目前的名單是:

1 1 3 4 6 3 5 
Where temp = 7 

現在設置1等於溫度,這是7? 1 =溫度;

So the list is now: 
1 7 3 4 6 3 5 

我的理解是否正確?

+0

是的。只要繼續這樣做,直到它被全部排序。 –

+0

是的你是對的。看看https://en.m.wikipedia.org/wiki/Bubble_sort – Jerome

+0

https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html – dtech

回答

0

此代碼段中

if (arr[i] > arr[i + 1]) { 

     tmp = arr[i]; 

     arr[i] = arr[i + 1]; 

     arr[i + 1] = tmp; 

     swapped = true; 
} 

你需要的,如果你直接寫

 arr[i] = arr[i + 1]; 

交換兩個對象arr[i]arr[i + 1]

那麼兩個對象將是相同的值之前的arr[i]值將會丟失。

所以剛開始,你需要在一些地方保存這個值。這樣做有聲明的輔助中間變量tmp

所以剛開始的arr[i]值變量tmp保留 讓我們假設arr[i]具有值7和arr[i + 1]擁有價值1

 tmp = arr[i]; 

現在tmparr[i]具有相同的值7。

然後arr[i]是通過ARR的值覆蓋第[i + 1]

 arr[i] = arr[i + 1]; 

現在這兩個變量具有相同的值1就是我們有tmp所述的arr[i + 1]

值等於7,ARR [i]和arr[i + 1]等於1

然而arr[i]先前值在變量tmp 被保存所以,現在這個值被分配給arr[i + 1]

 arr[i + 1] = tmp; 

而且我們正在arr[i + 1]是eqal 7和arr[i]等於TP 1

因此,這些值被交換。

1

首先,你似乎確實走在正確的軌道上。

一些提示可幫助您在旅程中取得進一步進步。

瞭解標準模板庫。有一個叫做swap的功能,它完全按照它在錫上所說的那樣做。

其次使用容器。它們比C風格的數組更不容易出錯。

終於在這裏是bubble sort explained via the medium of folk dancing