黑马程序员技术交流社区

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

作者: 朱东方    时间: 2012-7-10 18:36
标题: 数组排序问题
本帖最后由 朱东方 于 2012-7-10 20:41 编辑

/*
给数组进行排序。
*/

import java.util.*;
class  ArrayText2
{
//打印数组:
public static void printArray(int[] arr)
{
  System.out.print("[");
  for(int x=0;x<arr.length;x++)
  {
   if(x!=arr.length-1)
    System.out.print(arr[x]+",");
   else
    System.out.println(arr[x]+"]");
  }
}
//位置置换
public static void swap(int[] arr,int a,int b)
{
  int temp = arr[a];
  arr[a] = arr;
  arr = temp;
}
public static void main(String[] args)
{
  int[] arr = {3,2,5,8,0,1};
  //selectSort(arr);
  printArray(arr);
//bubbleSort(arr);
  
//java自带升序排列
  Arrays.sort(arr); //java自带排序。结果是:从小到大排的。怎么从大到小排序(java自带的功能)。
  printArray(arr);

}
//选择排序:大到小
public static void selectSort(int[] arr)
{
  for(int x=0;x<arr.length-1;x++)
  {
   for(int y=x+1;y<arr.length;y++)
   {
    if(arr[x]<arr[y])
     swap(arr,x,y);
   }
  }
}
//冒泡排序:大到小
public static void bubbleSort(int[] arr)
{
  for(int x=0;x<arr.length-1;x++)
  {
   for(int y=0;y<arr.length-x-1;y++)
   {
    if(arr[y]<arr[y+1])
     swap(arr,y,y+1);
   }
  }
}

}


作者: 朱东方    时间: 2012-7-10 18:40
只需回答问题,代码粘上去的--位置置换那的错误我知道,可是改不了。
作者: 郑小杰    时间: 2012-7-10 19:23
java自带的功能是对指定的 int 型数组按数字升序进行排序,没有从大到小的,要不就重写下compareable,自己定义一个比较
作者: 曹恒业    时间: 2012-7-10 19:36
我查了一下JDK1.6的帮助文档,还真没找到楼主需要的从大到小的降序排列,所以只能自己再手写一个降序的方法咯,写起来就容易了,只要用升序排列的结果反序保存在新数组里就好了。
位置置换那里的代码应该是,
public static void swap(int[] arr,int a,int b)
{
  int temp = arr[a];
  arr[a] = arr[b];
  arr[b] = temp;
}

希望有帮到你~~
作者: 朱东方    时间: 2012-7-10 20:38
郑小杰 发表于 2012-7-10 19:23
java自带的功能是对指定的 int 型数组按数字升序进行排序,没有从大到小的,要不就重写下compareable,自己 ...

既然没有就拉到了,今天看见了就问问 谢谢了
作者: 朱东方    时间: 2012-7-10 20:41
曹恒业 发表于 2012-7-10 19:36
我查了一下JDK1.6的帮助文档,还真没找到楼主需要的从大到小的降序排列,所以只能自己再手写一个降序的方法 ...

谢谢了,还帮我查:handshake
作者: 韦念欣    时间: 2012-7-10 20:53
楼主不需要重写比较器,可以直接使用Collections中的静态方法reverseOrder()强行逆转指定比较器的顺序,这样方便多了。
作者: 朱东方    时间: 2012-7-10 21:55
韦念欣 发表于 2012-7-10 20:53
楼主不需要重写比较器,可以直接使用Collections中的静态方法reverseOrder()强行逆转指定比较器的顺序,这 ...

这样啊,我还没学到那块。以后估计就能明白了。谢谢了
作者: 曹俊    时间: 2012-7-10 21:57

位置置换的代码如下:int temp = int[x];
                                   int[x] = int[y];
                                   int[y] = temp;
希望对你有帮助哈,因为我今天刚敲了很多边数组冒泡和选择排序的代码,所以对这个现在很熟悉~~~
作者: 朱东方    时间: 2012-7-10 22:02
曹俊 发表于 2012-7-10 21:57
位置置换的代码如下:int temp = int[x];
                                   int[x] = int[y];
         ...

看的很仔细啊。位置置换那块,我复制过来的本来有,发表出来就缺了。

你指的那出错误,我是想打印出这样的效果:  [3,2.....]
作者: 曹俊    时间: 2012-7-10 22:07
朱东方 发表于 2012-7-10 22:02
看的很仔细啊。位置置换那块,我复制过来的本来有,发表出来就缺了。

你指的那出错误,我是想打印出这样 ...

好吧,看来我理解错了...{:3_46:}
作者: 朱东方    时间: 2012-7-10 22:23
曹俊 发表于 2012-7-10 22:07
好吧,看来我理解错了...

呵呵,代码有点乱了




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