betterhalf 2016-05-03 03:07 采纳率: 15.4%
浏览 4038

对数组a[0:8]=[3,2,6,5,9,4,7,1,8]进行冒泡排序,排序为什么不对

//================================================================//
//对数组a[0:8]=[3,2,6,5,9,4,7,1,8]进行冒泡排序 //
//================================================================//

int main()

{
int a[9] = { 3,2,6,5,9,4,7,1,8 };
int i,j;

for (i = 9;i>0;i--) 
{

    for (j = 0; j<9-i;j++)
    {
        if (a[j] > a[j + 1])
        {
            int temp = a[j];
            a[j] = a[j + 1];
            a[j + 1] = temp;
        }
    }
}
for (j=0;j<9;j++)
cout << a[j];
return 0;

}

  • 写回答

4条回答 默认 最新

  • 小毕哥_berg 2016-05-03 03:19
    关注

    你没理解冒泡排序的意义,建议你把书拿过来仔细看一下这个算法的思想是什么,
    大概意思是:
    第一次排序,把最大的(或者最小的)放到最后一个位子上
    第二次排序,最后一个位子不用参与比较了,因为刚才已经确定他是最大的了,所以循环的时候不用考虑最后一位,这次会把最大的放在倒数第二个位子上
    .........
    第N次只剩下一个数,然后就是一个有序序列。

    稍微改了下你的代码,

     int main()
    
    {
        int a[9] = { 3, 2, 6, 5, 9, 4, 7, 1, 8 };
        int i, j;
    
    /*
        for (i = 9; i > 0; i--)
        {
    
            for (j = 0; j<9 - i; j++)
            {
                if (a[j] > a[j + 1])
                {
                    int temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }*/
    
        for (i = 0; i < 9; i++)
        {
            for (j = 1; j < 9 - i; j ++)
            {
                if (a[j - 1] > a[j])
                {
                    int iTemp = a[j - 1];
                    a[j - 1] = a[j];
                    a[j] = iTemp;
                }
            }
        }
    
        for (j = 0; j < 9; j++)
            cout << a[j]<<' '<<endl;
    
        system("pause");
        return 0;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办