二分排序

来源:互联网 发布:杀破狼 js主唱去世 编辑:程序博客网 时间:2024/06/06 07:16

import java.util.ArrayList;
import java.util.Scanner;

public class BinSork {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        ArrayList<Integer> list = new ArrayList<Integer>();
        String str = cin.next();
        while (!str.equals("end")) {
            list.add(Integer.parseInt(str));
            str = cin.next();
        }

        Object[] objects = list.toArray();
        Integer[] nums = new Integer[objects.length];
        for (int i = 0; i < nums.length; i++) {
            nums[i] = (Integer) objects[i];
        }
        binSort(nums, 0, nums.length - 1);
        for (int i = 0; i < nums.length; i++)
            System.out.print("  " + nums[i]);

    }

    public static void binSort(Integer[] nums, int start, int end) {
        if (end > start) {
            int mid = (start + end) / 2;
            binSort(nums, start, mid);
            binSort(nums, mid + 1, end);
            mearge(nums, start, end);

        }

    }

    public static void mearge(Integer[] nums, int start, int end) {
        Integer[] temp = new Integer[end - start + 1];
        int mid = (start + end) / 2;
        int i = start, j = mid + 1;
        int index = 0;
        while (i <= mid && j <= end) {
            if (nums[i].intValue() - nums[j].intValue() <= 0)
                temp[index] = nums[i++];
            else
                temp[index] = nums[j++];
            index++;
        }
        while (i <= mid)
            temp[index++] = nums[i++];
        while (j <= end)
            temp[index++] = nums[j++];
        for (int k = 0; k <= end - start; k++)
            nums[k + start] = temp[k];

    }
}

原创粉丝点击