|
1 | 1 | package sort.algorithm;
|
2 | 2 |
|
3 | 3 | import model.Algorithm;
|
4 |
| -import model.Input; |
5 |
| -import model.TimeMeasurement; |
| 4 | +import model.Input.Input; |
| 5 | +import model.Input.MergeInput; |
| 6 | +import model.Input.MergeSortInput; |
6 | 7 |
|
7 |
| -public class MergeSort extends TimeMeasurement implements Algorithm { |
| 8 | +public class MergeSort implements Algorithm { |
8 | 9 |
|
9 |
| - public MergeSort(boolean showExecutionTime) { |
10 |
| - super(showExecutionTime); |
11 |
| - } |
12 | 10 |
|
13 | 11 | @Override
|
14 | 12 | public int[] run(Input input) {
|
15 |
| - int[] data = input.getData(); |
| 13 | + int data[] = input.getData(); |
| 14 | + int p = ((MergeSortInput) input).getStart(); |
| 15 | + int r = ((MergeSortInput) input).getEnd(); |
| 16 | + |
| 17 | + int t = p + 1; |
16 | 18 |
|
17 |
| - start(data.length); |
| 19 | + if (t < r) { |
| 20 | + int q = (int) Math.floor((p + r) / 2.0); |
| 21 | + data = run(new MergeSortInput(data, p, q)); |
| 22 | + data = run(new MergeSortInput(data, q, r)); |
| 23 | + data = new Merge(false).run(new MergeInput(data, p, q - 1, r - 1)); |
| 24 | + } |
18 | 25 |
|
19 |
| - int n1 = input.getMergeSortBreak() + 1; |
20 |
| - int n2 = data.length - n1; |
| 26 | + return data; |
| 27 | + } |
21 | 28 |
|
22 |
| - int[] Left = new int[n1+1]; |
23 |
| - int[] Right = new int[n2+1]; |
| 29 | + @Override |
| 30 | + public void start(int n) { |
24 | 31 |
|
25 |
| - System.arraycopy(data, 0, Left, 0, n1); |
26 |
| - System.arraycopy(data, n1, Right, 0, n2); |
| 32 | + } |
27 | 33 |
|
28 |
| - Left[n1] = Integer.MAX_VALUE; |
29 |
| - Right[n2] = Integer.MAX_VALUE; |
| 34 | + @Override |
| 35 | + public void done() { |
30 | 36 |
|
31 |
| - int leftIndex = 0; |
32 |
| - int rightIndex = 0; |
| 37 | + } |
33 | 38 |
|
34 |
| - for(int i = 0; i < data.length; i++){ |
35 |
| - if(Left[leftIndex] <= Right[rightIndex]){ |
36 |
| - data[i] = Left[leftIndex]; |
37 |
| - leftIndex++; |
38 |
| - } |
39 |
| - else{ |
40 |
| - data[i] = Right[rightIndex]; |
41 |
| - rightIndex++; |
42 |
| - } |
43 |
| - } |
44 |
| - done(); |
45 |
| - return data; |
| 39 | + @Override |
| 40 | + public Double getExecutionTime() { |
| 41 | + return null; |
46 | 42 | }
|
47 | 43 | }
|
0 commit comments