- This is a basic implementation of the Mergesort to sort arrays of integers.
Merge Sort
1 public class MergeSort {
2
3 public static int[] sort(int[] arr)
4 {
5 if (arr.length == 1)
6 return arr;
7
8 int middle = arr.length / 2;
9 int[] left = new int[middle];
10 int[] right = new int[arr.length - middle];
11
12 for (int i =0;i<middle;i++)
13 left[i]=arr[i];
14
15 for (int i = 0; i < right.length;i++)
16 right[i]=arr[i+middle];
17
18 left = sort(left);
19 right = sort(right);
20
21 if (left[left.length-1] > right[0])
22 return merge(left,right);
23 else
24 return append(left,right);
25 }
26
27 public static int[] merge(int[] left, int[] right)
28 {
29 int[] result = new int[left.length + right.length];
30 int lPtr=0;
31 int rPtr=0;
32 int resultPtr=0;
33
34 while (lPtr < left.length && rPtr < right.length)
35 {
36 if (left[lPtr] < right[rPtr]){
37 result[resultPtr]=left[lPtr];
38 lPtr++;
39 resultPtr++;
40 } else {
41 result[resultPtr]=right[rPtr];
42 rPtr++;
43 resultPtr++;
44 }
45 }
46
47 if (lPtr == left.length)
48 {
49 while (rPtr != right.length)
50 result[resultPtr++]=right[rPtr++];
51 } else {
52 while (lPtr != left.length)
53 result[resultPtr++]=left[lPtr++];
54 }
55
56 return result;
57 }
58
59 public static int[] append(int[] left,int[] right)
60 {
61 int[] result = new int[left.length + right.length];
62 for (int i = 0;i<left.length;i++)
63 result[i]=left[i];
64
65 for (int i = 0;i<right.length;i++)
66 result[i+left.length]=right[i];
67
68 return result;
69 }
70 }
Comments
Sign in to leave a comment.

