2014-02-24 181 views
0

我的氣泡排序代碼出現了什麼問題,以及如何在排序後(Lisesarch之前)將它寫出來。冒泡排序。 C++

我已經使用了基於本書中唯一例子的代碼。在網上搜索了一些關於如何按年齡對數組列表進行排序的指南,但是我找不到一個(至少,對我來說不是那麼先進的)。所以我回來了另一段代碼,可能會讓你的眼睛流血^^對不起。

#include <iostream> 
#include <string> 
using namespace std; 


class person 
{ 
public: 
string name; 
int age; 

void SetInfo(const string _name, int _age) 
{ 
    name = _name; 
    age = _age; 
} 
int getAge(){ return age; } 
}; 

int Linearsearch(person* personarray, int key) 
{ 
for (int i = 0; i < 10; i++) 
{ 
    if (personarray[i].age == key) 
     return i; 
} 
return -1; 
} 

void bubblesort(person mylist[], int n) 
{ 
for (int i = 1; i<n; i++) 
{ 

    for (int j = 0; j<n - 1; j++) 
    { 
     if (mylist[j].getAge() > mylist[j + 1].getAge()) 
     { 
      person temp; 
      temp = mylist[j]; 
      mylist[j] = mylist[j + 1]; 
      mylist[j + 1] = temp; 
     } 
    } 
} 
} 

int main()//start of program 
{ 
person mylist[4];//List of people 
mylist[0].SetInfo("Calle", 22); 
mylist[1].SetInfo("Björn", 20); 
mylist[2].SetInfo("Larry", 60); 
mylist[3].SetInfo("Lena", 54); 

//calling bubblesort() 
bubblesort(mylist, 4); 


int index = Linearsearch(mylist, 20); 

if (index == -1) 
    cout << "person not found!"; 
else 
    cout << "the person you searched for " << mylist[index].name; 

cin.get(); 
return 0; 
system("pause"); 
} 

我評論過我從代碼中得到的錯誤//。

首先,我甚至不知道我在這裏的氣泡排序代碼將針對年齡並按照我喜歡的方式進行排序。

我已經嘗試了沒有氣泡排序代碼的其餘代碼,它實際上工作得很好(:D)。
任何和所有的幫助泡沫排序代碼或如何讓它在排序後顯示將是很好的。 請投我的問題或告訴我如何改革它,使其不那麼煩惱,而不是抱怨。並且隨時可以幫助我編輯我的問題(如果可以的話)。

+2

編譯器告訴你主要問題是什麼 - 你需要傳遞數組和列表大小作爲參數/參數到彙編,否則它不能在它們上操作,因爲它們被聲明爲main(locals) )或根本沒有:( –

+0

所以在這種情況下,「n」需要是4?:(我是瑞典語,所以英語很難理解有時>如果我有這個權利,我可以將n重命名爲max,設置max爲4?爲了讓我更清楚 – Nyp0ns0pp0saurus

+0

首先 - 你爲什麼要使用變量,這些變量在任何地方都沒有聲明?(比如像'ortures'或'list'中的'n')嘗試讀一些關於C++ (最好是最基本的教程) – zoska

回答

1

你有第一件事在主函數中聲明mylist並試圖在bubblesort函數中訪問該函數,該函數不屬於人類的一部分。其他的事情是,你不能比較兩個對象,因爲你正在對列表進行排序。您可以基於年齡成員變量對mylist對象列表進行排序。親自加班getAge()方法。

class person 
{ 
    public: 
     string name; 
     int age; 

    void SetInfo(const string _name, int _age) 
    { 
     name = _name; 
     age = _age; 
    } 
    int getAge(){return age;} 
}; 

    void bubblesort(person mylist[],int n) 
    { 
     for (int i = 1; i<n; i++) 
     { 

      for (int j = 0; j<n - 1; j++) //n is "undefined" should n be the number of objects in the list maybe? 
      { 
       if (mylist[j].getAge() > mylist[j + 1].getAge()) //the first mylist is "undefined". 
       { 
        person temp; 
        temp = mylist[j]; 
        mylist[j] = mylist[j + 1]; 
        mylist[j + 1] = temp; 
       } 
      } 
     } 
    } 
int main()//start of program 
{ 
    person mylist[4];//List of people 
    mylist[0].SetInfo("Calle", 22); 
    mylist[1].SetInfo("Björn", 20); 
    mylist[2].SetInfo("Larry", 60); 
    mylist[3].SetInfo("Lena", 54); 

    //calling bubblesort() 
    bubblesort(mylist,4); 

    //list.display(); //list is undefined. 

    int index = Linesearch(mylist, 20); 

    if (index == -1) 
     cout << "person not found!"; 
    else 
     cout << "the person you searched for " << mylist[index].name; 

    cin.get(); 
    return 0; 
    system("pause"); 
} 

我認爲這應該工作。 phewww ...

+0

謝謝隊友!所以我應該在person類中的字符串名稱和int年齡之後添加一個getage()?究竟會做什麼以及如何製作該方法? – Nyp0ns0pp0saurus

+0

我會編輯我的答案,並嘗試涵蓋一切... – HadeS

+0

希望這會幫助你.. – HadeS

1

我只是簡單地看了一下,但我認爲你在泡泡分類中使用它之前並沒有聲明n。 也,我不認爲你在那裏做的是泡沫排序。試試這個:

void bubblesort() 
{ 
    int k=1; 
    while (k==1) 
     { 
      k=0; 
      for (i=1;i<=n;i++) 
      { 
       if (mylist[i]>=mylist[i-1]) 
       { 
        temp=mylist[i]; 
        mylist[i]=mylist[i-1]; 
        mylist[i-1]=temp; 
        k=1; 
       } 
      } 
     } 
} 

修改爲你的榜樣,我相信它會工作:)

+0

所以沒有溫度?:o所以,而替換我的空泡沫?並且aux的立場是什麼?我對bubblesort和C++初學者都很陌生,所以我真的需要了解這個伴侶。對不起,有點愚蠢^^並感謝您的回答,我會嘗試您提供的代碼,盡我所能! – Nyp0ns0pp0saurus

+0

我使用了aux。它對temp做的是同樣的事情。對不起,我沒有正確解釋,我很着急 – FilipMarusca

+0

不是很冒泡,但至少它打破了noswap的外層循環,這是非常重要的部分。你內在的循環應該是'i WhozCraig

1

變化

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

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

在冒泡功能