如数组[1,56,'a',23,11,'b',8,16,'c'],要求排序后输出[1,8,'a',11,16,'b',23,56,'c'],字母的位置不变,输出的是字母a,b,c,不是对应的ASCII码值。

解决方案 »

  1.   

    随便写的,没什么算法,空了再来研究一下public static void main(String[] args) {
    Object[] array = { 1, 56, 'a', 23, 11, 'b', 8, 16, 'c' };

    Map<Integer, Character> chars = new HashMap<Integer, Character>();
    List<Integer> numbers = new ArrayList<Integer>();

    for (int i = 0; i < array.length; i++) {
    if (array[i] instanceof Character) {
    chars.put(i, (Character) array[i]);
    } else {
    numbers.add((Integer) array[i]);
    }
    }

    Collections.sort(numbers, new Comparator<Integer>() {
    public int compare(Integer o1, Integer o2) {
    return o2 - o1;
    }
    });

    Stack<Integer> s = new Stack<Integer>();
    s.addAll(numbers);

    for (int i = 0; i < array.length; i++) {
    if (chars.containsKey(i)) {
    System.out.print(chars.get(i));
    } else {
    System.out.print(s.pop());
    }
    if (i != array.length - 1) {
    System.out.print(",");
    }
    }
    }
      

  2.   

    完美版:Object[] objs = {1, 56, 'a', 23, 11, 'b', 8, 16, 'c'};
    int length = objs.length;
    for (int i = 0; i < length; i++) {
    int n = length - i - 1;
    for (int j = 0; j < n; j++) {
    if (objs[j] instanceof Number) {
    int k = j;
    do {
    k++;
    }while((k <= n) && !(objs[k] instanceof Number));
    if (k <= n && new BigDecimal(objs[j].toString()).compareTo(new BigDecimal(objs[k].toString())) > 0) {
    Object o = objs[j];
    objs[j] = objs[k];
    objs[k] = o;
    }
    }
    }
    }
    System.out.println(Arrays.toString(objs));你还可以用这个实现所有数字类型的排序,如:
    {1.24, 54, "我", 77, 'a', "墨云", 68, -1, 0, 5, 4, '9'}
    排序结果:
    [-1, 0, "我", 1.24, 'a', "墨云", 4, 5, 54, 68, 77, '9']