#1 ์๊ณ ๋ฆฌ์ฆ
#1-1

#1-2

#1-3

#1-4

#1-5

๋ณํฉ ์ ๋ ฌ์ ์ด ๋น๊ต ํ์๋, ์ต์ ์ ๊ฒฝ์ฐ nlog2n์ด๋ค
#2 ์ฝ๋
#2-1 ์๋ฐ
public static void mergeSort(int[] array, int startIndex, int endIndex) {
// (startIndex < endIndex)์ ์๋ฏธ: ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 2์ด์์ด๋ค.
if(startIndex < endIndex) {
int midIndex = (startIndex + endIndex) / 2;
mergeSort(array, startIndex, midIndex);
mergeSort(array, (midIndex + 1), endIndex);
merge(array, startIndex, midIndex, endIndex);
}
}
private static void merge(int[] array, int startIndex, int midIndex, int endIndex) {
// array์์ ๋๋ 'f'irst ๋ถ๋ถ์ ์ํํ ์ธ๋ฑ์ค f
int f = startIndex; // f์ ์ต๋๊ฐ์ midIndex
// array์์ ๋๋ 's'econd ๋ถ๋ถ์ ์ํํ ์ธ๋ฑ์ค s
int s = midIndex + 1; // s์ ์ต๋๊ฐ์ endIndex
// 'T'emporary ๋ฐฐ์ด ๊ทธ๋ฆฌ๊ณ ์ด ๋ฐฐ์ด์ ์ํํ ์ธ๋ฑ์ค t
int[] T = new int[endIndex - startIndex + 1];
int t = 0;
while(f <= midIndex && s <= endIndex) {
if(array[f] < array[s]) {
T[t++] = array[f++];
} else {
T[t++] = array[s++];
}
}
// f์ ์์ญ์ด ๋จ์๋ค๋ฉด ๋น์์ค๋ค
while(f <= midIndex) {
T[t++] = array[f++];
}
// s์ ์์ญ์ด ๋จ์๋ค๋ฉด ๋น์์ค๋ค
while(s <= endIndex) {
T[t++] = array[s++];
}
for(int i = 0; i < T.length; i++) {
array[startIndex + i] = T[i];
}
}
#2-2 ์ฝํ๋ฆฐ
fun mergeSort(array: Array<Int>, startIndex : Int, endIndex : Int) {
// (startIndex < endIndex)์ ์๋ฏธ: ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 2์ด์์ด๋ค.
if(startIndex < endIndex) {
val midIndex = (startIndex + endIndex) / 2
mergeSort(array, startIndex, midIndex)
mergeSort(array, (midIndex + 1), endIndex)
merge(array, startIndex, midIndex, endIndex)
}
}
fun merge(array : Array<Int>, startIndex: Int, midIndex : Int, endIndex: Int) {
// array์์ ๋๋ 'f'irst ๋ถ๋ถ์ ์ํํ ์ธ๋ฑ์ค f
var f = startIndex // f์ ์ต๋๊ฐ์ midIndex
// array์์ ๋๋ 's'econd ๋ถ๋ถ์ ์ํํ ์ธ๋ฑ์ค s
var s = midIndex + 1 // s์ ์ต๋๊ฐ์ endIndex
// 'T'emporary ๋ฐฐ์ด ๊ทธ๋ฆฌ๊ณ ์ด ๋ฐฐ์ด์ ์ํํ ์ธ๋ฑ์ค t
val T : Array<Int> = Array(endIndex - startIndex + 1) { 0 }
var t = 0
while(f <= midIndex && s <= endIndex) {
if(array[f] < array[s]) {
T[t++] = array[f++]
} else {
T[t++] = array[s++]
}
}
// f์ ์์ญ์ด ๋จ์๋ค๋ฉด ๋น์์ค๋ค
while(f <= midIndex) {
T[t++] = array[f++]
}
// s์ ์์ญ์ด ๋จ์๋ค๋ฉด ๋น์์ค๋ค
while(s <= endIndex) {
T[t++] = array[s++]
}
for(i : Int in 0..(T.size - 1)) {
array[startIndex + i] = T[i]
}
}
#3 ์์ฝ
๋ณํฉ ์ ๋ ฌ์ ๋ฌธ์ ๋ฅผ 2๊ฐ๋ก ๋๋ ํโจ'๋ณํฉ'ํ๋ ์ ๋ ฌ์ด๋ค
#4 ์ด ๊ฐ๋ ์ด ์ฌ์ฉ๋ ๊ธ
2751
#1 ์๊ณ ๋ฆฌ์ฆ ๋ณํฉ ์ ๋ ฌ (Merge Sort) #1 ์๊ณ ๋ฆฌ์ฆ ๋ณํฉ ์ ๋ ฌ์ ์ด ๋น๊ต ํ์๋, ์ต์ ์ ๊ฒฝ์ฐ nlog2n์ด๋ค #2 ์ฝ๋ (์๋ฐ) public static void mergeSort(int[] array, int startIndex, int endIndex) { // (startIndex < endIndex)์ ์
kenel.tistory.com
11651 - ์ขํ ์ ๋ ฌํ๊ธฐ 2
#1 ์๊ณ ๋ฆฌ์ฆ 11650 - ์ขํ ์ ๋ ฌํ๊ธฐ #1 ์๊ณ ๋ฆฌ์ฆ ํ ์ ๋ ฌ (Heap Sort) #1 ์๊ณ ๋ฆฌ์ฆ ํ(heap)์ด๋ผ๋ ์์ด ๋จ์ด์ ์ฌ์ ์ ์๋ฏธ๋ ์์ ๋์ ๋ฌด๋๊ธฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋จ์ด๋ ํ๋ก๊ทธ๋๋ฐ์์๋ ์ฌ์ฉ๋๋ค. ์ฒซ์งธ๋ก
kenel.tistory.com
[๋ฐฑ์ค] 11399 - ATM
#1 ์๊ณ ๋ฆฌ์ฆ ๋ณํฉ ์ ๋ ฌ (Merge Sort) #1 ์๊ณ ๋ฆฌ์ฆ ๋ณํฉ ์ ๋ ฌ์ ์ด ๋น๊ต ํ์๋, ์ต์ ์ ๊ฒฝ์ฐ nlog2n์ด๋ค #2 ์ฝ๋ (์๋ฐ) public static void mergeSort(int[] array, int startIndex, int endIndex) { // (startIndex < endIndex)์ ์
kenel.tistory.com
'๊นจ์ ๊ฐ๋ ๐ > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ๋ ฌ - ์ฝ์ ์ ๋ ฌ (Insertion Sort) (0) | 2023.11.29 |
---|---|
์ ๋ ฌ - ํ ์ ๋ ฌ (Heap Sort) (0) | 2023.11.20 |
์ ๋ ฌ - ๋ฒ๋ธ ์ ๋ ฌ (Bubble Sort) (0) | 2023.11.13 |
์ค๋ณต๋ ์์ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ์ ์ด์ง ํ์ (Binary Search) (0) | 2023.11.07 |
์ด์ง ํ์ (Binary search) (0) | 2023.11.06 |