1 public class Solution
2 {
3 public void adapter(int[] data)
4 {
5 mergeSort(data, 0, data.length - 1);
6 }
7
8 public void mergeSort(int[] data, int left, int right)
9 {
10 if(left >= right)
11 {
12 return;
13 }
14
15 int middle = (left + right) / 2;
16
17 mergeSort(data, left, middle);
18 mergeSort(data, middle + 1, right);
19
20 mergeArray(data, left, middle, right);
21 }
22
23 public void mergeArray(int[] data, int left, int middle, int right)
24 {
25 int[] temp = new int[right - left + 1];
26
27 int pointerOne = left;
28 int pointerTwo = middle + 1;
29
30 int count = 0;
31
32 for(count = 0; count < temp.length; count ++)
33 {
34 if((pointerOne > middle) || (pointerTwo > right))
35 {
36 break;
37 }
38
39 if(data[pointerOne] < data[pointerTwo])
40 {
41 temp[count] = data[pointerOne ++];
42 }
43 else
44 {
45 temp[count] = data[pointerTwo ++];
46 }
47 }
48
49 while(pointerOne <= middle)
50 {
51 temp[count ++] = data[pointerOne ++];
52 }
53
54 while(pointerTwo <= right)
55 {
56 temp[count ++] = data[pointerTwo ++];
57 }
58
59 for(int i = 0; i < temp.length; i ++)
60 {
61 data[left + i] = temp[i];
62 }
63 }
64
65 }