Skip to content

added merge sort algorithms using java #88

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions Sorting Algorithms/Merge_sort (java alg).java
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package merge_sort;

import java.util.Arrays;

/**
*
* @author Bhashitha
*/
public class Merge_sort {

/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
//Unsorted array
Integer[] a = { 2, 6, 3, 5, 1 };

//Call merge sort
mergeSort(a);

//Check the output which is sorted array
System.out.println(Arrays.toString(a));
}

@SuppressWarnings("rawtypes")
public static Comparable[] mergeSort(Comparable[] list)
{
//If list is empty; no need to do anything
if (list.length <= 1) {
return list;
}

//Split the array in half in two parts
Comparable[] first = new Comparable[list.length / 2];
Comparable[] second = new Comparable[list.length - first.length];
System.arraycopy(list, 0, first, 0, first.length);
System.arraycopy(list, first.length, second, 0, second.length);

//Sort each half recursively
mergeSort(first);
mergeSort(second);

//Merge both halves together, overwriting to original array
merge(first, second, list);
return list;
}

@SuppressWarnings({ "rawtypes", "unchecked" })
private static void merge(Comparable[] first, Comparable[] second, Comparable[] result)
{
//Index Position in first array - starting with first element
int iFirst = 0;

//Index Position in second array - starting with first element
int iSecond = 0;

//Index Position in merged array - starting with first position
int iMerged = 0;

//Compare elements at iFirst and iSecond,
//and move smaller element at iMerged
while (iFirst < first.length && iSecond < second.length)
{
if (first[iFirst].compareTo(second[iSecond]) < 0)
{
result[iMerged] = first[iFirst];
iFirst++;
}
else
{
result[iMerged] = second[iSecond];
iSecond++;
}
iMerged++;
}
//copy remaining elements from both halves - each half will have already sorted elements
System.arraycopy(first, iFirst, result, iMerged, first.length - iFirst);
System.arraycopy(second, iSecond, result, iMerged, second.length - iSecond);
}
}