java中的排序问题

1,2,2,3,4按不同顺序排列,把每个组合输出用java怎么写啊?

采用插入算法实现排列:
[code="java"]
public class Composition {

char [][] insert(char [] a,char b) {
    int row = a.length+1;
    int col = row ;
    int insertPos = 0;//插入位置
    char [][] r = new char[row][col];
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            if(j < insertPos) {
                r[i][j] = a[j];
            } else if(j > insertPos ){
                r[i][j] = a[j-1];
            } else {
                r[i][j] = b;
            }
        }
        insertPos++;
    }
    return r;
}

char [][] composition(char [] c) {
    char [][] r = {{c[0]}};
    char [][][] d ;
    int ii;
    for (int i = 1; i < c.length; i++) {
        d = new char[r.length][0][0];
        for (int j = 0; j < r.length; j++) {
            d[j]=insert(r[j],c[i]);
        }
        r = new char[d.length*d[0].length][0];
        ii = 0;
        for (int j = 0; j < d.length; j++) {
            for (int j2 = 0; j2 < d[j].length; j2++) {
                r[ii++] = d[j][j2];
            }
        }
    }
    return r;
}

public static void main(String[] args) {
    Composition com = new Composition();

// new char[]{'1','2','3','4','2','2'}
// new char[]{'1','2','3','4','2','2','2'}
char [][] r = com.composition(new char[]{'1','2','3','4','2'});
Set set = new HashSet();
System.out.println(r.length);
for (int i = 0; i < r.length; i++) {
set.add(new String(r[i]));
// System.out.println(r[i]);

}
System.out.println(set.size());
Iterator it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());

}
}
}
[/code]
代码就是就是上面的,具体解释等我有时间了给你解释

排序从功能的角度来说,分为:升序(asd),降序(desc)
从排序的方法来说可以分为:
1.插入排序:简单插入排序,二路插入排序
2.交换排序:冒泡排序,快速排序
3.选择排序:选择排序,堆排序
4.其他排序方法。

在java中对于整数提供了排序API
java.util.Arrays
</[code="java"]
int [] a = new int[] {2,3,1,4,2};
[/code]
直接调用方法sort就可以
</[code="java"]
a = Arrays.sort(a);
[/code]
不过这个默认是升序 的 降序的需要自己写。

兄弟,我明白你的意思了 你想要的不是排序,而是组合。这个需要自己写程序。如果不会可以把你的需求再详细些 我给你写一个。

你参考一下这个吧:Java排列组合算法[code="java"]http://blog.csdn.net/guo_rui22/article/details/2199732[/code]

Java排列组合算法:[url]http://blog.csdn.net/guo_rui22/article/details/2199732 [/url]

[code="java"]
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class PrintAll {

private int[] arr;

public PrintAll(int[] arr) {
    Arrays.sort(arr);
    this.arr = arr;
}

public int[][] execute() {
    return execute0(arr);
}

private int[][] execute0(int[] array) {
    if (array.length == 1)
        return new int[][] { array };
    // number --> 任意一个 index
    Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    for (int i = 0; i < array.length; ++i) {
        if (map.get(array[i]) == null) {
            map.put(array[i], i);
        }
    }
    if (map.size() == 1) { // all same like {2,2,2,2}
        return new int[][] { array };
    } else {
        List<int[][]> res = new ArrayList<int[][]>();
        for (Integer key : map.keySet()) {
            int index = map.get(key);
            int[] newarray = new int[array.length - 1];
            // newarray 是从 array 去掉index位置元素所得到的新数组
            System.arraycopy(array, 0, newarray, 0, index);
            System.arraycopy(array, index + 1, newarray, index,array.length - index - 1);
            // 递归
            int[][] _result = execute0(newarray);
            int[][] all = addfirst(key, _result);
            res.add(all);
        }
        if (res.size() == 1) {
            return res.get(0);
        } else {
            int size = 0;
            for (int i = 0; i < res.size(); ++i) {
                size += res.get(i).length;
            }
            int[][] result = new int[size][];
            int start = 0;
            for (int i = 0; i < res.size(); ++i) {
                int[][] tmp = res.get(i);
                System.arraycopy(tmp, 0, result, start, tmp.length);
                start += tmp.length;
            }
            return result;
        }
    }
}

// 将first添加到last中每一个的头部
private int[][] addfirst(int first, int[][] last) {
    int[][] result = new int[last.length][];
    for (int i = 0; i < result.length; ++i) {
        int[] old = last[i];
        int[] newone = new int[old.length + 1];
        newone[0] = first;
        System.arraycopy(last[i], 0, newone, 1, old.length);
        result[i] = newone;
    }
    return result;
}

public static void main(String[] args) {
    int[] test = new int[] { 1, 2, 2, 3, 4 };
    PrintAll comp = new PrintAll(test);
    int[][] result = comp.execute();
    for (int i = 0; i < result.length; ++i) {
        System.out.println(Arrays.toString(result[i]));
    }
}

}
[/code]
递归的, 比较好写; 不保证时间和空间效率很高. 8)

你是要全排列的功能还是要乱序的功能????