当前位置: 代码迷 >> J2SE >> java编写排序有关问题
  详细解决方案

java编写排序有关问题

热度:88   发布时间:2016-04-24 01:09:26.0
java编写排序问题
数组包含2,10,11,4,21,5,7,6,19,15十个数字,编写一个方法使数组输出顺序为:最大,最小,次大,次小......,
请给出思路及代码,谢谢!

------解决方案--------------------
写了个冒泡:
Java code
import java.util.Arrays;public class Main {    public static void sort(int[] myArray) {        boolean b = true;        for (int j = myArray.length-1; j > 0; j--) {            System.out.println(j);            for (int i = myArray.length-1; i > myArray.length-1 -j; i--) {                if (b && myArray[i] > myArray[i - 1]) {                    int temp = myArray[i];                    myArray[i] = myArray[i - 1];                    myArray[i - 1] = temp;                }else if(!b &&  myArray[i] < myArray[i - 1] ){                    int temp = myArray[i];                    myArray[i] = myArray[i - 1];                    myArray[i - 1] = temp;                }                            }            b = !b;        }    }    public static void main(String[] args) {        int[] myArray = new int[] { 10, 8, 3, 5, 6, 7, 4, 6, 9,2 ,1};        sort(myArray);        System.out.println(Arrays.toString(myArray));    }}
------解决方案--------------------
就本题来说,或者说能够确定待排数组的最大值和最小值(这里是min:2 max:21),那么用计数排序是效率最高的:
Java code
public static void main(String[] args) {        int[] data = new int[] { 2,10,11,4,21,5,7,6,19,15 };        bucketSort(data, 2, 22);    }    /**     * 排序方法     *      * @param data     *            待排序数组     * @param min     *            待排序数组最小边界值     * @param max     *            待排序数组最大边界值+1     * @return 无     */    public static void bucketSort(int[] data, int min, int max) {        int[] tmp = new int[data.length];// 1.创建缓存数组;再对于这个可枚举范围构建一个buckets数组(定义max-min个桶)        int[] buckets = new int[max - min];        // 2.计算每个元素在序列出现的次数        for (int i = 0; i < data.length; i++) {            buckets[data[i] - min]++;        }        // 3.计算"落入"各桶内的元素在有序序列中的位置        for (int i = 1; i < max - min; i++) {            buckets[i] = buckets[i] + buckets[i - 1];        }        // 4.将data中的元素完全复制到tmp数组中        System.arraycopy(data, 0, tmp, 0, data.length);        // 5.根据buckets数组中的信息将待排序列的各元素放入相应位置        for (int k = data.length - 1; k >= 0; k--) {// 倒序循环为的是稳定性            data[--buckets[tmp[k] - min]] = tmp[k];        }    }
------解决方案--------------------
下面上代码
Java code
import java.util.Arrays;public class Test {    public static void main(String[] args) {        int[] nums = new int[] { 2, 10, 11, 4, 21, 5, 7, 6, 19, 15 };        //排序        Arrays.sort(nums);        int[] result = new int[nums.length];        //头尾依次插入        for(int i = 0,j = 0, k =result.length - 1 ; j <= k;i++){            int index = i % 2 == 1 ? j++ : k--;            result[i] = nums[index];        }        System.out.println("result : " + Arrays.toString(result));    }}
  相关解决方案