λ³ν©μ λ ¬
μ΄λ²μλ λ³ν© μ λ ¬μ λν΄ μμ보μ. λ³ν©μ λ ¬λ ν΅μ λ ¬κ³Ό λ§μ°¬κ°μ§λ‘ λνμ μΈ 'λΆν μ 볡' λ°©λ²μ μ±νν μκ³ λ¦¬μ¦μ΄λ€. λ°λΌμ κ²°κ³Όμ μΌλ‘ ν΅ μ λ ¬κ³Ό λμΌνκ² O(N * logN)μ μκ° λ³΅μ‘λλ₯Ό κ°μ§λ€.
λ€λ§ ν΅ μ λ ¬μ μ΅μ μ κ²½μ° O(N^2)μ μκ°λ³΅μ‘λλ₯Ό κ°μ§μ§λ§, λ³ν©μ λ ¬μ μ νν λ°μ μ© λλλ€λ μ μμ μ΅μ μ κ²½μ°μλ O(N*logN)μ 보μ₯νλ€.
λ€μμ μ«μλ€μ μ€λ¦μ°¨μμΌλ‘ μ λ ¬νλ νλ‘κ·Έλ¨μ μμ±νμΈμ.
7 6 5 8 3 5 9 1
λ³ν©μ λ ¬μ νλμ ν° λ¬Έμ λ₯Ό λκ°μ μμ λ¬Έμ λ‘ λΆν ν λ€μ κ°μ κ³μ°νκ³ λμ€μ ν©μΉλ λ°©λ²μ μ±ννλ€. μ¦ κΈ°λ³Έ μμ΄λμ΄λ μΌλ¨ μ νν λ°μΌλ‘ λλκ³ λμ€μ μ λ ¬νλ κ²μ΄λ€.
ν΅ μ λ ¬κ³Ό λ€λ₯΄κ² νΌλ² κ°μ΄ μκ³ νμ λ°μΌλ‘ λλλ€λ νΉμ§μ΄ μκ³ , λλ¬Έμ λ¨κ³μ ν¬κΈ°κ° log Nμ΄ λλλ‘ λ§λ€μ΄μ€λ€.
7 6 5 8 3 5 9 1
67 58 35 19
5678 1359
13556789
λ¬Έμ μ 7 6 5 8 3 5 9 1μ λͺ¨λ ν¬κΈ°κ° κ°λ³μΈ λ°°μ΄λ‘, μ¦ ν¬κΈ°κ° 1μΈ λ°°μ΄ μνλ‘ μμνλ€. 첫λ²μ§Έ λ¨κ³μμλ λ°°μ΄μ ν¬κΈ°κ° 2κ°μ΄λ€. μ΄λ κ°λ³μ μμλ€μ΄ λκ°λ‘ ν©μ³μ§λ μκ° μ λ ¬μ΄ λλ€. λ°λΌμ 7 / 6 μ 67λ‘, 5 / 8 μ 58λ‘... λ€μ λ¨κ³μμλ 2κ°μ μμλ‘ μ΄λ£¨μ΄μ§ λ°°μ΄λ€μ΄ μ λ ¬λλ©΄μ ν©μ³μ§λ€. 67 / 58 μ΄ 5678λ‘, 35 / 19κ° 1359λ‘...
ν©μΉλ κ°―μκ° 2λ°°μ© μ¦κ°νλ€λ μ μμ λ¨κ³μ ν¬κΈ°λ λ°μ΄ν°μ κ°―μκ° Nκ° μΌλ log Nμ μ μ§νκ² λλ€.
λ°λΌμ λ³ν©μ λ ¬μ μκ° λ³΅μ‘λλ O(N * log N)μ΄ λλ€.
#include <stdio.h>
int number = 8;
int size;
int sorted[8]; // μ λ ¬ λ°°μ΄μ λ°λμ μ μλ³μλ‘ μ μΈ
int count = 0;
void merge(int a[],int m, int middle, int n)){
int i = m;
int j = middle +1;
int k = m;
// μμ μμλλ‘ λ°°μ΄μ μ½μ
while(i<=middle &&j<=n){
if(a[i] <= a[j]) {
sorted[k] = a[i];
i++;
}
else{
sorted[k] = a[j];
j++;
}
k++;
}
//λ¨μ λ°μ΄ν°λ μ½μ
if(i>middle){
for(int t = j; t<=n; t++){
sorted[k] = a[t];
k++;
}
}
else{
for(int t=i;t<=middle;t++){
sosrted[k] = a[t];
k++;
}
}
//μ λ ¬λ λ°°μ΄μ μ½μ
for(int t=m; t<=n; t++){
a[t] = sorted[t];
}
}
void mergeSort(int a[], int m, int n){
//μ΄μΈμ κ²½μ°λ ν¬κΈ°κ° 1κ°μΈ κ²½μ°
if(m<n){
int middle = (m+n)/2;
mergeSort(a,m,middle);
mergeSort(a,midddle+1,n);
merge(a,m,middle,n);
}
}
int main(void){
int array[number] = {7, 6, 5, 8, 3, 5, 9, 1};
mergeSort(array,0,number-1);
for(int i=0; i< number;i++){
printf("%d ", array[i]);
}
}
λ³ν© μ λ ¬μ ꡬνν λ μ λ ¬μ μ¬μ©λλ λ°°μ΄μ λ°λμ 'μ μλ³μ'λ‘ μ μΈν΄μΌ νλ€. λ§μ½ ν¨μ μμμ λ°°μ΄μ μ μΈνκ² λλ€λ©΄ λ§€λ² λ°°μ΄μ μ μΈν΄μΌ νλ―λ‘ λ©λͺ¨λ¦¬ λλΉκ° λ§€μ° μ»€μ§ μ μκΈ° λλ¬Έμ΄λ€. λ°λΌμ κΈ°λ³Έμ μΌλ‘ λ³ν©μ λ ¬μ 'κΈ°μ‘΄μ λ°μ΄ν°λ₯Ό λ΄μ μΆκ°μ μΈ λ°°μ΄κ³΅κ°μ΄ νμνλ€'λ μ μμ λ©λͺ¨λ¦¬ νμ©μ΄ λΉν¨μ¨μ μ΄λΌλ λ¬Έμ κ° μλ€. νμ§λ§ μ΄λ€ μν©μμλ λ³ν©μ λ ¬μ μκ° λ³΅μ‘λλ O(N * log N)μ 보μ₯νλ μ μμ ν¨μ¨μ μΈ μκ³ λ¦¬μ¦μ΄λ€.
Python
sublist = [7,4,6,5,3,2,1,9,8,10]
def merge(list1,left,right,end):
merged = []
l,r = left,right
while l< right and r<=end:
if list1[l] <=list1[r]:
merged.append(list1[l])
l+=1
else:
merged.append(list1[r])
r+=1
while l<right:
merged.append(list1[l])
l+=1
while r<=end:
merged.append(list1[r])
r+=1
l = left
for n in merged:
list1[l] = n
l+=1
def mergeSort(list1,p,q):
if p>=q:
return
mid = (p+q)//2
mergeSort(list1,p,mid)
mergeSort(list1,mid+1,q)
merge(list1,p,mid+1,q)
print(sublist)
sorted = mergeSort(sublist,0,len(sublist)-1)
print(sublist)
μ΄ κΈμ λλλΉλμ μ€μ μκ³ λ¦¬μ¦ κ°μ’ (Algorithm Programming Tutorial)λ₯Ό μ°Έκ³ ν΄ μμ±νμμ΅λλ€.
https://www.youtube.com/watch?v=qQ5iLNjpxSk&list=PLRx0vPvlEmdDHxCvAQS1_6XV4deOwfVrz
'μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μκ³ λ¦¬μ¦ [Algorithm] - κ³μ μ λ ¬ Counting Sort (7) (C, Python) (0) | 2022.03.12 |
---|---|
μκ³ λ¦¬μ¦ [Algorithm] - ν μ λ ¬ Heap Sort(6) (C,Python) (0) | 2022.03.11 |
μκ³ λ¦¬μ¦ [Algorithm] - κΈ°μ΄ μ λ ¬λ¬Έμ νμ΄λ³΄κΈ° (5) (C, Python) (0) | 2022.03.09 |
μκ³ λ¦¬μ¦ [Algorithm] - ν΅ μ λ ¬ (4) (C, Python) (0) | 2022.03.08 |
μκ³ λ¦¬μ¦ [Algorithm] - μ½μ μ λ ¬ (3) (C, Python) (0) | 2022.03.07 |