Example 1: merge sort java
public static void mergeSort(int[] a, int n) {
if (n < 2) {
return;
}
int mid = n / 2;
int[] l = new int[mid];
int[] r = new int[n - mid];
for (int i = 0; i < mid; i++) {
l[i] = a[i];
}
for (int i = mid; i < n; i++) {
r[i - mid] = a[i];
}
mergeSort(l, mid);
mergeSort(r, n - mid);
merge(a, l, r, mid, n - mid);
}
public static void merge(
int[] a, int[] l, int[] r, int left, int right) {
int i = 0, j = 0, k = 0;
while (i < left && j < right) {
if (l[i] <= r[j]) {
a[k++] = l[i++];
}
else {
a[k++] = r[j++];
}
}
while (i < left) {
a[k++] = l[i++];
}
while (j < right) {
a[k++] = r[j++];
}
}
Example 2: Merge sort java
public class JavaMergeSort
{
void sorting(int[] num, int left, int main, int right)
{
int list1 = main - left + 1;
int list2 = right - main;
int[] L = new int[list1];
int[] R = new int[list2];
for(int a = 0; a < list1; ++a)
L[a] = num[left + a];
for(int b = 0; b < list2; ++b)
R[b] = num[main + 1+ b];
int p = 0, q = 0;
int r = left;
while(p < list1 && q < list2)
{
if(L[p] <= R[q])
{
num[r] = L[p];
p++;
}
else
{
num[r] = R[q];
q++;
}
r++;
}
while(p < list1)
{
num[r] = L[p];
p++;
r++;
}
while(q < list2)
{
num[r] = R[q];
q++;
r++;
}
}
void sort(int[] arrNum, int l, int r)
{
if(l < r)
{
int m = (l + r) / 2;
sort(arrNum, l, m);
sort(arrNum , m+1, r);
sorting(arrNum, l, m, r);
}
}
static void displayArray(int[] arr)
{
int number = arr.length;
for(int a = 0; a < number; ++a)
System.out.print(arr[a] + " ");
System.out.println();
}
public static void main(String[] args)
{
int[] arrNumbers = {33, 00, 55, 11, 22, 44};
System.out.println("Before sorting - ");
displayArray(arrNumbers);
JavaMergeSort obj = new JavaMergeSort();
obj.sort(arrNumbers, 0, arrNumbers.length - 1);
System.out.println("\nAfter sorting - ");
displayArray(arrNumbers);
}
}
Example 3: mergesort java
public class MergeSort
{
public static void main(String[] args)
{
int i;
int values[] = new int[11];
for(i=0; i<values.length; i++) { values[i]=values.length-i; }
print(values);
sort(values,0,values.length-1);
print(values);
}
public static void sort(int[] numbers, int p,int r)
{
int q;
if(p<r)
{
q = (p+r)/2;
sort(numbers,p,q);
sort(numbers,q+1,r);
merge(numbers,p,q,r);
}
}
private static void merge(int[] values, int p, int mid, int r)
{
int i,j,k;
int n1 = mid - p + 1;
int n2 = r - mid;
int[] left = new int[n1+1];
int[] right = new int[n2+1];
for(i=0; i<n1; i++)
{
left[i] = values[ p + i ];
}
for(j=0; j<n2; j++)
{
right[j] = values[mid + j + 1];
}
left[n1] = Integer.MAX_VALUE;
right[n2] = Integer.MAX_VALUE;
i=0; j=0;
for(k=p; k<=r; k++)
{
if(left[i]<=right[j])
{
values[k] = left[i];
i = i + 1;
}
else
{
values[k] = right[j];
j = j + 1;
}
}
}
public static void print(int[] numbers)
{
int i;
for(i=0; i<numbers.length; i++)
{
System.out.print(numbers[i]+ " ");
}
System.out.println();
}
}