如何通过气泡排序对排序数字(升序/降序)进行编码?

时间:2014-11-13 06:49:33

标签: java sorting numbers descendant

我需要帮助使用冒泡排序并对其进行排序,无论是升序还是降序:(

          int[] number = {12, 5, 6, 14, 18};    

      int[] number = new int[5];
      String[] mark = new String[10];
      String evenOrOdd = "";
      String output = "";

      JTextArea textArea = new JTextArea(12,30);


      for(int i = 0; i < number.length; i++) {
        number[i] = Integer.parseInt(JOptionPane.showInputDialog("Enter a number"));

        if (number[i] % 2 == 0) {
            evenOrOdd = "even";
        }
        else {
            evenOrOdd = "odd  ";
        }

        mark[i] = "";
        for(int j = 0; j < number[i]; j++) {
            mark[i] = mark[i] + "*"; 
        }

        output = output + number[i] + "\t"; 
        output = output + evenOrOdd + "\t";
        output = output + mark[i] + "\n";
      } 

      textArea.setText("numbers\ttype\tgraph\n" + output);
      JOptionPane.showMessageDialog(null, 
                        textArea,
                                   "OUTPUT",
                                   JOptionPane.INFORMATION_MESSAGE);    
      System.exit(0);   
    }
}

}

代码缺少冒泡排序,我不知道放在哪里。 有人可以帮帮我吗?它不需要用户输入任何内容,

1 个答案:

答案 0 :(得分:0)

支持升序和降序的方式是将Comparator传递给sort()方法并使用它来测试元素比较的结果,例如

public static void bubbleSort(int[] numero, Comparator<Integer> comp) {
    int n = numero.length;
    int temp = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 1; j < (n - i); j++) {
            if (comp.compare(numero[j - 1], numero[j]) > 0) {
                temp = numero[j - 1];
                numero[j - 1] = numero[j];
                numero[j] = temp;
            }
        }
    }
}

升序是Comparable的默认行为,例如Integer。所以我们可以委托compareTo()喜欢,

private static Comparator<Integer> ascending = new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1.compareTo(o2);
    }
};

然后降序与升序相反,所以委托并反转

private static Comparator<Integer> descending = new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return -ascending.compare(o1, o2);
    }
};

然后测试

public static void main(String arg[]) {
    int[] arr = { 10, 30, 20 };
    System.out.println(Arrays.toString(arr));
    bubbleSort(arr, ascending);
    System.out.println("Ascending: " + Arrays.toString(arr));
    bubbleSort(arr, descending);
    System.out.println("Descending: " + Arrays.toString(arr));
}

输出

[10, 30, 20]
Ascending: [10, 20, 30]
Descending: [30, 20, 10]