-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMerge.java
More file actions
83 lines (65 loc) ยท 2.41 KB
/
Merge.java
File metadata and controls
83 lines (65 loc) ยท 2.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package basic.sort.impl;
import basic.sort.Sort;
/*
๋๋๊ณ ํฉ์น๋ฉด์ ์ ๋ ฌ์ ์งํํ๋ ๊ฒ.
์ต์ฐ์ ์์๋ก ์
๋ ฅ๊ฐ๋ค์ ํ๋์ฉ ์ชผ๊ฐ๊ณ
๊ทธ๊ฒ๋ค์ ํฉ์น๋ฉด์ ์ ๋ ฌ์ ์งํํจ.
*/
public class Merge implements Sort {
public static int count = 1;
@Override
public void sort(int[] array) {
// N ์ด 10 ๊ฐ๋ฉด array์ ๋ฒ์๋ 0 ~ 9
mergeSort(array,0,array.length-1);
}
public void mergeSort(int[] array, int start, int end){
if(start == end) return;
else{
int mid = (end+start)/2;
//์ ์ฒด ๊ธธ์ด์ ์ ๋ฐ(์๋ถ๋ถ ์ ๋ ฌ)
mergeSort(array, start,mid);
//์ ์ฒด ๊ธธ์ด์ ์ ๋ฐ(๋ท๋ถ๋ถ ์ ๋ ฌ)
mergeSort(array, mid+1,end);
//์๋ถ๋ถ๊ณผ ๋ท๋ถ๋ถ์ ํฉ์น๋ฉฐ ์ ๋ ฌ
merge(array,start,mid,end);
}
}
private void merge(int[] array, int start, int mid, int end) {
int[] temp = new int[end-start+1];
//๋๋ ๊ฒ ์ค ์์ชฝ์ ์์ index
int front = start;
//๋๋ ๊ฒ ์ค ๋ท์ชฝ์ ์์ index
int back = mid+1;
int i = 0;
//์ ๋ ฌ ๋ฐฉ์์
//start ~ end ๊น์ง์ ์๋ฅผ ํฌํจํ๋ ์์ temp๋ฅผ ๋๊ณ
//์๋ถ๋ถ vs ๋ท๋ถ๋ถ์ ๋น๊ตํ์ฌ ์์ ์๋ฅผ temp์ ์์๋๋ก ์ ์ฅํ๋ ๋ฐฉ์
while(true){
//๋ง์ฝ front ๋ฒ์๋ฅผ ๋ค ๋ฃ์์ ๋
if(front > mid){
//ํ์ฌ์ back๋ถํฐ end๊น์ง
for(int j=back;j<=end;j++){
temp[i++] = array[j];
}
break;
}
//๋ง์ฝ front์ ๋ฒ์๋ฅผ ๋ค ๋ฃ์์ ๋
else if(back > end){
//๋จ์ front ~ (end+
for(int j = front;j<=mid;j++){
temp[i++] = array[j];
}
break;
}
//array์ ์๋ถ๋ถ์ด ์์ ๊ฒฝ์ฐ temp์ front์ ๊ฐ์ ๋ฃ๊ณ 1 ๊ฐ๊ฐ 1 ์ฆ๊ฐ
else if(array[front] < array[back]) temp[i++] = array[front++];
//๋ฐ๋์ ๊ฒฝ์ฐ temp์ back์ ๊ฐ์ ๋ฃ๊ณ ๊ฐ๊ฐ 1์ฆ๊ฐ
else temp[i++] = array[back++];
}
i = 0;
for(int index = start;index<=end;index++){
array[index] = temp[i++];
}
printAllArray(temp,count++);
}
}