黑马程序员技术交流社区

标题: 这怎么排不出来 [打印本页]

作者: 余善航    时间: 2013-1-7 23:55
标题: 这怎么排不出来
public static void name(int[] arr){
                int q;
                for(int e=0;e<arr.length-1;e++){
                        for(int u=0;u<arr.length-e-1;u++){
                                if(arr[e]<arr[e+1]){
                                        q=arr[e];
                                        arr[e]=arr[e+1];
                                        arr[e+1]=q;
                                }
                        }
                }
               
               
        }
作者: 肖志锋    时间: 2013-1-8 00:08
你这是冒泡排序,所以  if(arr[e]<arr[e+1]){这句错了,把e改成内循环的u就可以了当然下面的换位置也要改成u的
作者: 高阳    时间: 2013-1-8 00:19
      for(int e=0;e<arr.length-1;e++){
                         for(int e=0;u<arr.length-e-1;e++){
                                 if(arr[e]<arr[e+1]){
                                        int q=arr[e];
                                         arr[e]=arr[e+1];
                                         arr[e+1]=q;
                                 }
                         }交换用的变量需要声明类型啊,还有,你的字母写错了,字母能排,不报错吗
                 }
作者: 陈丽莉    时间: 2013-1-8 09:57
本帖最后由 陈丽莉 于 2013-1-8 10:11 编辑

    一楼说的很对,就是内循环的数据角标用混了。
    内循环的大概意思是,先从arr[0]开始到arr[arr.length-1-1]都和它的后一位比较并按大小决定是否交换,这样一轮下来,arr[0]中的数就是已经比较出来的最大或最小值;然后再从arr[1]开始到arr[arr.length-1-1],比较自身和后一位的大小。。理解了这些,再好好思考一下,自然就不会将比较的角标弄混了。
    为了直观,我把修改后的代码贴一下吧。

不知道怎么回事儿,回帖总是有下划线,还老不见了下脚标,没办法只好传截图了。

1.png (3.13 KB, 下载次数: 33)

1.png

作者: 陈丽莉    时间: 2013-1-8 10:02
本帖最后由 陈丽莉 于 2013-1-8 10:12 编辑

怎么回事。。 下划线去不掉啦  - -|||
【u】,用中文输入法写的下脚标,看看还在么。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2