2014-03-27 165 views
0

那裏我需要做一個程序,將生成隨機數字和排序它們。 程序需要從srand()函數生成它們來初始化隨機數列。程序應該以升序或降序顯示列表,所有三個都需要並排。按順序排序數字 - 冒泡排序 - C++

我的代碼中存在一個問題,即按升序排序並逐漸減少。

有我的代碼:

using namespace std; 

int main() 
{ 
int n,j=0; 
int temp; 
int compt=2; 
int compt2=2; 
int tab [50]; 
int random = 0; 

cout<< "\n Bonjour!"; 
do 
{ 
    cout<< "\n\n Entrer la longeur de liste que vous desirez (5 a 50) : "; 
    cin>> n; 

    if(5>n || n>50) 
    { 
     cout<< "\n ``ERREUR``"; 
    } 
}while (5>n || n>50); 

srand((unsigned)time(NULL)); 
cout<<"\n "; 
for(j=0;j<n;j++) 
{ 
    random = (rand()%n+1); 
    tab [j] = random; 
    cout<<tab[j]<<" "; 
} 
while(compt>1) 
{ 
    compt=0; 
     for (j=0;j<n;j++) 
     { 
      if(tab[j]>tab[j+1]) 
      { 
       temp = tab[j]; 
       tab[j] = tab [j+1]; 
       tab [j+1] = temp; 
       compt+=1; 
      } 
     } 
} 
cout<<"\n apres tri croissant"<<endl; 
for(j=0;j<n;j++) 
{ 
    cout<<tab[j-1]<<" "; 

} 
cout<<"\n apres tri deroissant"<<endl; 
for(j=(n-1);j>=0;j--) 
{ 
    cout<<tab[j-1]<<" "; 

} 
cout<<"test"; 



} 

在此先感謝

回答

1

看看使用的std ::算法來處理排序。

0

在此代碼:

for (j=0;j<n;j++) 
    { 
    if(tab[j]>tab[j+1]) 

你有一個錯誤。數字n是你的數組的大小,以最大數組索引是n-1。在此代碼中,在上次比較中,您正在比較tab[n-1]tab[n]

嘗試chaning到:

for (j=0;j<(n-1);j++) 
    { 
    if(tab[j]>tab[j+1]) 
0

試試這樣說:

while(compt>1){ 
    compt=0; 
    int aux = tab[0]; //We create an auxiliar variable with 1st value in array 
    for (j=1;j<n;j++){ 
     if(aux>tab[j]){ //We sort it 
      temp = aux; 
      aux = tab [j]; 
      tab [j] = temp; 
      compt++; //As you're adding +1 each time, you can change compt += 1 for compt++ (does the same) 
     } 
    } 
} 

此代碼是

for(j=0;j<n;j++){ 
    cout<<tab[j-1]<<" "; 
} 

如果我沒有錯,因爲我不能現在測試它,它應該是:'因爲它會在第一位標籤[0-1]即(tab [-1])打印,我們都知道它不存在。

for(j=0;j<n;j++){ 
    cout<<tab[j]<<" "; 
} 

這應該工作