2010-02-06 71 views
3

所以這裏是我到目前爲止有:如何使用C++中的指針進行冒泡排序?

void sortArray(int amountOfScores, int* testScores) 
{ 
    for(int i = 0; i < amountOfScores; i++) 
    { 
     for(int j = 0; j < amountOfScores-1; j++) 
     { 
      if(*(testScores+i) > *(testScores+j+1)) 
      { 
       int temp = *(testScores+j); 
       *(testScores+j) = *(testScores+j+1); 
       *(testScores+j+1) = temp; 
      } 
     } 
    }  
    for(int i = 0; i < amountOfScores; i++) 
    { 
     cout << *(testScores+i) << endl; 
    } 
} 

基本上我試圖讀取用戶想要輸入然而,許多號碼,然後按升序進行排序。 Catch是我必須使用指針,我從來沒有真正理解它們。上面的代碼適用於3個數字,但是,再加上它會導致它不能對它們進行排序......我儘可能以最好的方式嘗試瞭解決問題,但沒有任何關於指針的知識,我不知道我在找什麼。

感謝您的幫助!

+0

testScores被聲明爲指向int的指針,如果你想使用int *指針進行排序,那麼你需要將int **傳遞給你的排序函數。無論是'int ** testScores'還是'int * testScores []',我認爲第二種形式更清晰。 – 2010-02-06 21:34:17

+0

一條建議:閱讀關於指針的一些教程,它們是什麼以及如何在數組中使用它們。它會讓你的生活更輕鬆! – 2010-02-06 21:35:22

+0

這功課嗎?如果是這樣,用「家庭作業」標籤標記它。如果沒有,爲什麼使用冒泡排序? – 2010-02-06 21:39:33

回答

3

您的問題可能是在這裏:

if(*(testScores+i) > *(testScores+j+1)) 

您是不是要找:

 if(*(testScores+j) > *(testScores+j+1)) 

(注意:我用j代替)。

順便說一句,在Bubble排序中,如果沒有掉期,你應該打破。這在某些情況下會導致加速。

+0

我希望這是一個家庭作業。 – joejoeson 2010-02-06 21:36:35

+0

是的,所以我只是把我的頭撞到了我的桌子上。的確,我的意思是j,而不是我,認爲這將是一件愚蠢的事情。謝謝你的新眼睛! – Jeff 2010-02-06 21:39:04

+0

@Jeff:是的,你的指針使用看起來很好。只有你的打字技能需要改進:) – 2010-02-06 21:44:58

1

無論您是在說數組還是鏈接列表(指針),氣泡排序的工作原理都是一樣的。

唯一的問題是,不是交換數組中兩個相鄰項目的位置,而是交換兩個相鄰列表元素之間的指針值。

該算法是相同的。

+0

OP的問題或代碼中沒有任何內容表明他正在處理鏈接列表。 – sepp2k 2010-02-06 21:38:52

+0

你的回答假設我已經足夠注意他的代碼了。壞/。習慣。 – joejoeson 2010-02-06 23:39:25