2010-02-06 112 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