2014-03-27 161 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]<<" "; 
} 

这应该工作