takes a list of integers and uses merge sort to sort them and returns a new array - Java Collection Framework

Java examples for Collection Framework:Array Sort

Description

takes a list of integers and uses merge sort to sort them and returns a new array

Demo Code


//package com.java2s;

public class Main {
    /**//from   w w w.  j a va2 s.  c o  m
     * This function takes a list of integers and uses merge sort to sort them
     * and returns a new array
     * @param list
     * @return
     */
    public static Integer[] mergeSort(Integer[] list) {
        if (list.length == 1)
            return list;
        int middle = list.length / 2;
        Integer[] left = new Integer[middle];
        for (int x = 0; x < middle; x++)
            left[x] = list[x];
        //System.out.print("left:"); printArray(left);
        Integer[] right = new Integer[list.length - middle];
        for (int x = 0; x < list.length - middle; x++)
            right[x] = list[middle + x];
        //System.out.print("right:"); printArray(right);
        return merge(mergeSort(left), mergeSort(right));
    }

    /**
     * This function merges two already sorted lists (in ascending order)
     * Approach:
     *    - just keeps two pointers and moves pointer along for whichever
     * list is being used to create the new list
     * @param list1
     * @param list2
     * @return
     */
    public static Integer[] merge(Integer[] list1, Integer[] list2) {
        int ptr1 = 0;
        int ptr2 = 0;
        int i = 0;
        Integer[] combined = new Integer[list1.length + list2.length];
        /*System.out.println("Combining ->");
           System.out.print("list 1:"); printArray(list1);
           System.out.print("list 2:"); printArray(list2);*/
        while (ptr1 < list1.length || ptr2 < list2.length) {
            if (ptr1 >= list1.length) {
                combined[i] = list2[ptr2];
                ptr2++;
            } else if (ptr2 >= list2.length || list1[ptr1] < list2[ptr2]) {
                combined[i] = list1[ptr1];
                ptr1++;
            } else {
                combined[i] = list2[ptr2];
                ptr2++;
            }
            i++;
        }

        /*System.out.println("\tCombined =>");
           System.out.print("combined:"); printArray(combined);*/
        return combined;
    }
}

Related Tutorials