2015-05-05 40 views
3

以下面的代碼到:如何將計數器添加到氣泡排序來計算數量比較?

int CountBubbleSort=0; 
template <typename Comparable> 
void bubbleSort(vector<Comparable*> &v) 
{ 
    bool sorted = false; 
    for(int pass = 1; pass < v.size() && !sorted; pass++) 
    { 
     sorted = true; 
     for(int i = 0; i < v.size() - pass; i++) 
     { 
      if(*v[i + 1] < *v[i]) 
      { 
       swap(v, i, i + 1); 
       CountBubbleSort++; 
       sorted = false; 

      } 
     } 
    } 
    cout<<"bubbleSort comparison is "<<CountBubbleSort<<endl; 
} 

當我打電話的功能,爲什麼是CountBubbleSort「0」的輸出,是什麼問題?

+1

您的輸入是否已經排序?你不計算比較次數,你要計算掉期次數。 – molbdnilo

回答

4
void bubbleSort(vector<Comparable*> &v) 
{ 
    bool sorted = false; 
    for(int pass = 1; pass < v.size() && !sorted; pass++) 
    { 
     sorted = true; 
     int i; 
     for(i = 0; i < v.size() - pass; i++) 
     { 
      if(*v[i + 1] < *v[i]) 
      { 
       swap(v, i, i + 1); 
       sorted = false; 

      } 
     } 
     CountBubbleSort += i; 
    } 
    cout<<"bubbleSort comparison is "<<CountBubbleSort<<endl; 
} 

要計算comparaisons的數量,你只需要添加自己內心的我(在每個第二環路你做我compraison)您countBubble你的第一個循環的每個回合。

+0

不應該'CountBubbleSort + = i;'在第二個for循環中嗎? –

+1

@MaartenBamelis你可以把它放在第二個for循環中,但我認爲最好是增加一次,而不是在每次轉動時迭代該計數器。 – Mekap

+0

好趕上使用+ =我 –