黑马程序员技术交流社区

标题: double数组排序 [打印本页]

作者: 杨庆雷    时间: 2014-4-18 15:47
标题: double数组排序
本帖最后由 杨庆雷 于 2014-4-20 11:49 编辑

排序结果 为什么会有两个一样的

360截图20140418154215834.jpg (135.38 KB, 下载次数: 32)

360截图20140418154215834.jpg

作者: yanzhendong    时间: 2014-4-18 16:08
测试过,是你打印的位置错了,你应该在第一个for()后面再加一个for语句专门用来打印:
  1. public static void sort(double[] arr){
  2.                 double temp;
  3.                 for(int x=0;x<arr.length;x++){
  4.                         for(int y=0;y<arr.length-x-1;y++){
  5.                                 if(arr[y]>arr[y+1]){
  6.                                         temp =arr[y];
  7.                                         arr[y]=arr[y+1];
  8.                                         arr[y+1]=temp;
  9.                                        
  10.                                 }
  11.                                
  12.                         }
  13.                        
  14.                        
  15.                        
  16.                 }
  17.                 //不能在第一个for循环中打印,要单独打印
  18.                 for(int x=0;x<arr.length;x++){
  19.                         System.out.println(arr[x]);
  20.                        
  21.                 }
  22.         }
  23.        
复制代码

作者: 杨庆雷    时间: 2014-4-18 16:31
yanzhendong 发表于 2014-4-18 16:08
测试过,是你打印的位置错了,你应该在第一个for()后面再加一个for语句专门用来打印: ...

两个 3  是怎么出来的、、、
作者: 清风夜独醉    时间: 2014-4-18 16:48
你打印的不是最终排序好的数组,而是每一轮排完序的一个临时的数组对应的脚标位的元素。
现在分析下每一轮排序完的临时的数组。
第一轮排序结果:arr = {1,3,4,2,5,7,12,85,222};打印arr[0]=1;
第二轮排序结果:arr = {1,3,2,4,5,7,12,85,222};打印arr[1]=3;
第三了排序结果:arr = {1,2,3,4,5,7,12,85,222} ;打印arr[2]=3;
.................
你的两个三就是这样出来的。
你应该在整个数组排序完再遍历数组打印。




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