黑马程序员技术交流社区

标题: 关于排序的问题 [打印本页]

作者: 木糖醇    时间: 2013-9-1 16:56
标题: 关于排序的问题
本帖最后由 木糖醇 于 2013-9-1 17:23 编辑
  1. class paixu
  2. {
  3. public static void main(String[] args)
  4. {
  5. int []arr={3,2,4,1};
  6. printArray(arr);
  7. selectSort(arr);
  8. printArray(arr);
  9. }
  10. public static void selectSort(int []arr)
  11. {
  12. for(int i=1;i<arr.length-1;i++)
  13. {

  14. for(int x=i+1;x<arr.length;)
  15. {
  16. if(arr[x]<arr[i])
  17. {
  18. int num=arr[x];
  19. arr[x]=arr[i];
  20. arr[i]=num;
  21. }
  22. }
  23. }
  24. }
  25. public static void printArray(int[] arr)
  26. {
  27. for(int x=0;x<arr.length;x++)
  28. {
  29. if(x!=arr.length-1)
  30. System.out.print(arr[x]+", ");
  31. else
  32. System.out.println(arr[x]);
  33. }
  34. }
  35. }
复制代码
为什么这段代码执行之后只有排序之前的结果,而不没有排序之后的结果?

作者: 范龙波    时间: 2013-9-1 17:03


作者: 木糖醇    时间: 2013-9-1 17:10
范龙波 发表于 2013-9-1 17:03

啊   这个确实疏忽了
不过执行之后是这样,两个都没有排序


作者: 范龙波    时间: 2013-9-1 17:11
本帖最后由 范龙波 于 2013-9-1 17:13 编辑

还有 你外层 for的角标应该从0开始 !
作者: 木糖醇    时间: 2013-9-1 17:14
范龙波 发表于 2013-9-1 17:11
还有 你外层 for的角标应该从0开始 !

{:soso_e100:}改了之后真的可以了    谢谢啦
作者: wrswuxiaoyan    时间: 2013-9-1 18:55
访问数组的角标都是从0开始的。
作者: 木糖醇    时间: 2013-9-1 19:39
wrswuxiaoyan 发表于 2013-9-1 18:55
访问数组的角标都是从0开始的。

嗯嗯    谢谢指点

作者: 毋须繁华    时间: 2013-9-1 20:37
本帖最后由 毋须繁华 于 2013-9-1 20:41 编辑
  1.                 int[] arr = {3,4,6,8,1,9};
  2.                 for(int k = 1;k<arr.length-1;k++){              //设置要进行循环的次数,
  3.                         for(int x = 0;x<arr.length-k;x++){    //从第一个索引位开始 和下一位对比
  4.                                 if(arr[x]>arr[x+1]){                //如果下一索引位的数值大与本索引位的数值
  5.                                         int temp = arr[x+1];   
  6.                                         arr[x+1] = arr [x];         //把大的换位置至后面。
  7.                                         arr[x] = temp;                       
  8.                                 }
  9.                         }
  10.                 }
  11.                 for(int i=0;i<arr.length;i++){                 //遍历输出排序后的数组
  12.                         System.out.print(arr[i]+"  ");
复制代码
从大到小进行冒泡排序
作者: wrswuxiaoyan    时间: 2013-9-2 21:57
亲,你的这个运行出来时从小到大的排序啊,for(int x = 0;x<arr.length-k;x++)这一步应该是这样的for(int x = 0;x<arr.length-k-1;x++)减1是为了防止数组角标越界,减K是因为让每次比较的元素减少!




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