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

#1-2

#2 ์ฝ๋
#2-1 ์๋ฐ
public static void insertionSort(int[] array, int startIndex, int endIndex) {
for(int maxIndex = (startIndex + 1); maxIndex <= endIndex; maxIndex++) {
// array[maxIndex]๊ฐ ์ต๋๊ฐ์ธ ๊ฒฝ์ฐ
if(array[maxIndex - 1] <= array[maxIndex]) {
continue;
// array[maxIndex]๊ฐ ์ต๋๊ฐ์ด ์๋ ๊ฒฝ์ฐ
} else {
insertion(array, startIndex, maxIndex);
}
}
}
private static void insertion(int[] array, int startIndex, int insertIndex) {
// ์ฝ์
์์น ์ฐพ๊ธฐ
int insertionDestination = -1;
for(int i = startIndex; i < insertIndex; i++) {
/*
* if(array[i] <= array[insertIndex]) { insertionDestination = i + 1 } ๋ผ๊ณ ์ฐ๋ฉด ์ ๋๋ค.
* ์๋ํ๋ฉด,
* array[insertIndex]๊ฐ array์ ์ต์๊ฐ์ธ ๊ฒฝ์ฐ, ์ฝ์
์์น๋ฅผ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. (insertionDestination์ ๊ฐ์ด -1์์ ๋ณ๊ฒฝ๋์ง ์์)
* ๊ทธ๋ ๋ค๋ฉด,
* if(array[insertIndex] <= array[i]) { insertionDestination = i } ๋ผ๊ณ ์ฐ๋ ๊ฒ์ '์' ๋๋๊ฐ?
* array[insertIndex]๋ '๋ฐ๋์ ์ต๋๊ฐ์ด ์๋๋ค' (insertSort() ์ฐธ์กฐ)
* ๋ฐ๋ผ์, ์ด ๊ฒฝ์ฐ insertionDestination์ ๊ฐ์ ๋ฐ๋์ -1์ ์ด๊ณผํ ๊ฐ(๋ฐฐ์ด์ ์ธ๋ฑ์ค)์ด ํ ๋น๋๋ค.
*/
if(array[insertIndex] <= array[i]) {
insertionDestination = i;
break;
}
}
// ์ฝ์
์์น์ ๋ฐ๋ฅธ array์ ์ธ๋ฑ์ค ์กฐ์
int temp = array[insertIndex];
for(int i = (insertIndex - 1); i >= insertionDestination; i--) {
array[i + 1] = array[i];
}
array[insertionDestination] = temp;
}
#2-2 ์ฝํ๋ฆฐ
fun insertionSort(array: Array<Int>, startIndex : Int, endIndex : Int) {
for(maxIndex : Int in (startIndex + 1)..endIndex) {
// array[maxIndex]๊ฐ ์ต๋๊ฐ์ธ ๊ฒฝ์ฐ
if(array[maxIndex - 1] <= array[maxIndex]) {
continue
// array[maxIndex]๊ฐ ์ต๋๊ฐ์ด ์๋ ๊ฒฝ์ฐ
} else {
insertion(array, startIndex, maxIndex)
}
}
}
fun insertion(array: Array<Int>, startIndex : Int, insertIndex: Int) {
// ์ฝ์
์์น ์ฐพ๊ธฐ
var insertionDestination = -1
for(i : Int in startIndex..<insertIndex) {
/*
* if(array[i] <= array[insertIndex]) { insertionDestination = i + 1 } ๋ผ๊ณ ์ฐ๋ฉด ์ ๋๋ค.
* ์๋ํ๋ฉด,
* array[insertIndex]๊ฐ array์ ์ต์๊ฐ์ธ ๊ฒฝ์ฐ, ์ฝ์
์์น๋ฅผ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. (insertionDestination์ ๊ฐ์ด -1์์ ๋ณ๊ฒฝ๋์ง ์์)
* ๊ทธ๋ ๋ค๋ฉด,
* if(array[insertIndex] <= array[i]) { insertionDestination = i } ๋ผ๊ณ ์ฐ๋ ๊ฒ์ '์' ๋๋๊ฐ?
* array[insertIndex]๋ '๋ฐ๋์ ์ต๋๊ฐ์ด ์๋๋ค' (insertSort() ์ฐธ์กฐ)
* ๋ฐ๋ผ์, ์ด ๊ฒฝ์ฐ insertionDestination์ ๊ฐ์ ๋ฐ๋์ -1์ ์ด๊ณผํ ๊ฐ(๋ฐฐ์ด์ ์ธ๋ฑ์ค)์ด ํ ๋น๋๋ค.
*/
if(array[insertIndex] <= array[i]) {
insertionDestination = i
break
}
}
// ์ฝ์
์์น์ ๋ฐ๋ฅธ array์ ์ธ๋ฑ์ค ์กฐ์
val temp = array[insertIndex]
for(i : Int in (insertIndex - 1) downTo insertionDestination) {
array[i + 1] = array[i]
}
array[insertionDestination] = temp
}
#3 ์์ฝ
์ฝ์ ์ ๋ ฌ์ ์ ๋ ฌ๋ ๋ฐฐ์ด์ ๊ฐ์ '์ฝ์ 'ํ๊ณ , ๊ทธ ๋ค์ ์์๋ค์ ๋ฐ์ด๋ด๋ ์ ๋ ฌ์ด๋ค.
#4 ์ด ๊ฐ๋ ์ด ์ฌ์ฉ๋ ๊ธ
[๋ฐฑ์ค] 27522 - ์นดํธ๋ผ์ด๋: ๋๋ฆฌํํธ
#1 ์๊ณ ๋ฆฌ์ฆ ์ฝ์ ์ ๋ ฌ (Insertion Sort) #1 ์๊ณ ๋ฆฌ์ฆ #2 ์ฝ๋ (์๋ฐ) public static void insertionSort(int[] array, int startIndex, int endIndex) { for(int maxIndex = (startIndex + 1); maxIndex kenel.tistory.com ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๋ฌ
kenel.tistory.com
'๊นจ์ ๊ฐ๋ ๐ > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋์ ํ๋ก๊ทธ๋๋ฐ (Dynamic Programming), ์ํฅ์(Bottom-up) ๋ฐ ํํฅ์(Top-down) ์ ๊ทผ (0) | 2024.01.04 |
---|---|
์ ๋ ฌ - ํต ์ ๋ ฌ (Quick Sort) (0) | 2023.12.01 |
์ ๋ ฌ - ํ ์ ๋ ฌ (Heap Sort) (0) | 2023.11.20 |
์ ๋ ฌ - ๋ณํฉ ์ ๋ ฌ (Merge Sort) (1) | 2023.11.14 |
์ ๋ ฌ - ๋ฒ๋ธ ์ ๋ ฌ (Bubble Sort) (0) | 2023.11.13 |