2 versoon versoon 于 2016.02.04 10:56 提问

c++的一道简单排序问题

代码我写好了,可是出了一些问题,请指教!

问题描述
  给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
  第一行为一个整数n。
  第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
  输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9

我写的代码如下:
#include
using namespace std;
int main(){
int n,i,j,max;
cin >>n;
int list[n-1];

for(i=0;i cin >>list[i];
}

for(j=0;j<n-1;j++){
    for(i=0;i<n-j;i++){
        if(list[i]>list[i+1]){
            max=list[i];
            list[i]=list[i+1];
            list[i+1]=max;
        }
    }
}
for(i=0;i<n;i++){
    cout<<list[i]<<' ';
}
return 0;   

}

到底是出了什么问题呢?

7个回答

91program
91program   Ds   Rxr 2016.02.04 11:05
已采纳

第一,数组不支持变量做为下标。

91program
91program 如你代码中的 int list[n-1]; 编译是不可能通过的,你所谓的代码写好了是好到什么程度?没有编译一下试试。
2 年多之前 回复
xianfajushi
xianfajushi   2016.02.04 11:07

如果能把每句用途都写在旁当注释,从而理清思路,那么,就能发现问题并解决问题,网络上这样代码太多了,也可以对比解决。

versoon
versoon 好的,我会改进啦,谢谢哦
2 年多之前 回复
91program
91program   Ds   Rxr 2016.02.04 11:08

第二,循环排序时,有数组操作越界的问题。请检查 for 循环的边界条件!

YXTS122
YXTS122   2016.02.04 11:09

把int list[n-1];改为int list[100];

WinsenJiansbomber
WinsenJiansbomber   2016.02.04 11:17

代码都不完整。

        for(i=0;i cin >>list[i];

还有这种 bubble 算法是最没效率的,学其它实用的排序法吧,比如 QSort。

WinsenJiansbomber
WinsenJiansbomber   2016.02.04 11:21

补一刀:冒泡排序这种东西是老师在课上忽悠学生用的,负责任的老师绝不会让你知道冒泡却不让你知道还一大堆的高效排序法。

paopaoTT
paopaoTT   2016.02.04 19:41

数组是不支持变量做下标的

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
简单选择排序(C语言实现)
简单选择排序也称直接选择排序,基本思想如下: 对于一组关键字{K1,K2,…,Kn}, 首先从K1,K2,…,Kn中选择最小值,假如它是 Kz,则将Kz与 K1对换;然后从K2,K3,… ,Kn中选择最小值 Kz,再将Kz与K2对换。如此进行选择和调换n-2趟,第(n-1)趟,从Kn-1、Kn中选择最小值 Kz将Kz与Kn-1对换, 最后剩下的就是该序列中的最大值,一个由小到大的有序序列就这样
排序之三:简单选择排序(C语言实现)
简单选择排序的算法实现思想是:第一趟,从n个记录当真找出 关键字最小的记录与第一个记录交换;第二趟,从第二个记录开始的n-1个记录中找出关键字最小的记录与第二个记录交换;依次类推,直到整个序列按照关键字有序。 下面实现一个简单的选择排序函数(按照逐渐递增方式进行排序): /* 选择排序算法的实现 * array[] : 待排序的数组 * length : 待排序的数组的长度 */
汽水瓶问题
汽水瓶问题–华为OJ题目题目 描写叙述: 有这样一道智力题:“某商店规定:三个空汽水瓶能够换一瓶汽水。 小张手上有十个空汽水瓶,她最多能够换多少瓶汽水喝?”答案是5瓶,方法例如以下:先用9个空瓶子换3瓶汽水。喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。 然后你让老板先借给你一瓶汽水,喝掉这瓶满的。喝完以后用3个空瓶子换一瓶满的还给老板。 假设小张手
用C程序来解决“百鸡问题”
中国古代算书《张丘建算经》中有一道著名的百鸡问题:公鸡每只值5 文钱,母鸡每只值3 文钱,而3 只小鸡值1 文钱。现在用100 文钱买100 只鸡,问:这100 只鸡中,公鸡、母鸡和小鸡各有多少只?void main (){int cocks=0,hens,chicks; while(cocks {hens=0; hens++;   while(hens    {chi
用C语言实现“百鸡问题”的求解
 用C语言实现“百鸡问题”的求解《张邱建算经》中,是原书卷下第38题,也是全书的最后一题:「今有鸡翁一,值钱伍;鸡母一,值钱三;鸡鶵三,值钱一。凡百钱买鸡百只,问鸡翁、母、鶵各几何?答曰:鸡翁四,值钱二十;鸡母十八,值钱五十四;鸡鶵七十八,值钱二十六。又答:鸡翁八,值钱四十;鸡 母十一,值钱三十三,鸡鶵八十一,值钱二十七。又答:鸡翁十二,值钱六十;鸡母四、值钱十二;鸡鶵八十 四,值钱二十八。」
马克思手稿中的数学题
马克思手稿中的数学题 马克思手稿中有一道趣味数学问题:有30个人,其中有男人、女人和小孩,在一家饭馆吃饭花了50先令;每个男人花3先令,每个女人花2先令,每个小孩花1先令;问男人、女人和小孩各有几人? 自己的写法   #include main() { int i,j,k; for (i=1;i<=28;i++) for (j=1;j<=28;j++) for
关于扑克牌的简单排序问题
问题: 求一副杂乱的牌的排序,有梅花(CLUBS),方块(DIAMONDS),红桃(HEARTS),黑桃(SPADES)。每种颜色为1,1,....13,不包含两张大王。 解: 以下为简单的随意抽象实现,现实情况可能更复杂。因为是随机产生扑克牌,如果并发几千万的情况,内存可能会出现问题,但是简单的一副牌是OK的。   CODE:      import java.util.Ra
【经典算法】:爱因斯坦台阶问题
爱因斯坦台阶问题爱因斯坦曾经提出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩下1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩下4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。请问该阶梯至少有多少阶。解题思路不是很简单吗?就是找一个i满足上述规则即可,从小的开始找呗,找到第一个最小的输出就完事了 =_=代码//爱因斯坦台阶问题 #include <iostrea
C语言 每天做一道编程题
好久没做编程题了,算法和数据结构该忘的也都忘干净了,今天开始至少每天做道题,然后写写tips吧,各种都可以。 3.13 写了两道简单的PAT:3n+1(卡拉兹猜想)和将数字转换成拼音       主要是体会一下输入字符串的三种方式:       scanf("%s",s);//s是数组名,或者是指针。       gets(s);//可以包括空格,而scanf不可以包括空格      
ACM-汽水瓶(C语言基础题)
描述 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝? 输入输