氣泡排序

交換過程圖

img

img

img

img

img

比較大小

陣列大小為6,以下為陣列的索引

0 1 2 3 4 5

i與j變數解釋

i變數為最大輪數與最大次數。

以本例來說,最大輪數為5輪

以本例來說,比較最大次數5次

j變數為比較次數的計數器,arr[j]與arr[j+1],二個相鄰的變數比較大小

j = 0,arr[0]與arr[1]比較大小

j = 1,arr[1]與arr[2]比較大小

j = 2,arr[2]與arr[3]比較大小

j = 3,arr[3]與arr[4]比較大小

j = 4,arr[4]與arr[5]比較大小

第1輪 i =5

i最大比較次數 i = 5

j < i最大次數5

j的索引0…4

arr[j]與arr[j+1],二個互相比較

索引 0 1 2 3 4 5
j=0 0 1        
j=1   1 2      
j=2     2 3    
j=3       3 4  
j=4         4 5

第2輪 i =4

i最大比較次數 i = 4

j < i最大次數4

j的索引0…3

arr[j]與arr[j+1],二個互相比較

索引 0 1 2 3 4 5
j=0 0 1        
j=1   1 2      
j=2     2 3    
j=3       3 4  

第3輪 i = 3

i最大比較次數 i = 3

j < i最大次數3

j的索引0…2

arr[j]與arr[j+1],二個互相比較

索引 0 1 2 3 4 5
j=0 0 1        
j=1   1 2      
j=2     2 3    

第4輪 i = 2

i最大比較次數 i = 2

j < i最大次數2

j的索引0…1

arr[j]與arr[j+1],二個互相比較

索引 0 1 2 3 4 5
j=0 0 1        
j=1   1 2      

第5輪 i = 1

i最大比較次數 i = 1

j < i最大次數1

j的索引0

arr[0]與arr[0+1],二個互相比較

索引 0 1 2 3 4 5
j=0 0 1        

完整程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using namespace std;
void bubbleSort(int arr[], int len) {
  for(int i = len-1; i > 0; i--) {
    for(int j = 0; j < i; j++) {
      if(arr[j] > arr[j+1]) {
        int temp = arr[j];
        arr[j] = arr[j+1];
        arr[j+1] = temp;
      }
    }
  }
}
int main() {
  int arr[] = {6,5,4,3,2,1};
  int len = sizeof(arr)/sizeof(int);
  bubbleSort(arr, len);
  
  for(int i = 0; i < len; i++) {
    cout << arr[i] << ",";
  }
  cout << endl;
  return 0;
}
1,2,3,4,5,6,

results matching ""

    No results matching ""