【问题标题】:sorting numbers in order - bubble sort - C++按顺序排序数字 - 冒泡排序 - C++
【发布时间】:2014-03-29 04:38:36
【问题描述】:

我需要做一个程序来生成随机数并对它们进行排序。 程序需要从 srand() 函数中生成它们来初始化随机数系列。程序应该以升序或降序显示列表,所有三个需要并排显示。

我的代码中存在一个问题,即按升序和递减对数字进行排序。

这是我的代码:

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";



}

提前致谢

【问题讨论】:

    标签: c++ sorting numbers


    【解决方案1】:

    看看使用 std::algorithms 来处理排序。

    【讨论】:

      【解决方案2】:

      在这段代码中:

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

      你有一个错误。数字n 是数组的大小,最大数组索引是n-1。在这段代码中,在最后一次比较中,您将tab[n-1]tab[n] 进行比较。

      尝试将其更改为:

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

      【讨论】:

        【解决方案3】:

        试试这个方法:

        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]<<" ";
        }
        

        如果我没有错,因为我现在无法测试它,它应该是:因为它将在我们所有人的第一个位置 tab[0-1] 即 (tab[-1]) 打印知道,它不存在。

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

        应该可以的

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-08-25
          • 2014-03-26
          • 2018-11-13
          • 2016-02-10
          • 1970-01-01
          • 2012-04-06
          • 1970-01-01
          相关资源
          最近更新 更多