λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

μ•Œκ³ λ¦¬μ¦˜

μ•Œκ³ λ¦¬μ¦˜ [Algorithm] - μ‚½μž… μ •λ ¬ (3) (C, Python)

μ‚½μž…μ •λ ¬

μ΄λ²ˆμ—λŠ” μ‚½μž… 정렬에 λŒ€ν•΄ μ•Œμ•„λ³΄μž. μ‚½μž…μ •λ ¬μ΄λž€ 각 숫자λ₯Ό μ μ ˆν•œ μœ„μΉ˜μ— μ‚½μž…ν•˜λŠ” 것이닀. λ¨Όμ € μ†ŒμŠ€μ½”λ“œλ₯Ό ν™•μΈν•΄λ³΄μž.


λ‹€μŒμ˜ μˆ«μžλ“€μ„ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ„Έμš”.

1 10 5 8 7 6 4 3 2 9


 

#include <stdio.h>

int main(void){
	int i,j,temp;
    int array[10] = {1,10,5,8,7,6,4,3,2,9};
    for(i=0;i<9;i++){
    	j=i;
    	while(j >=0 && array[j] > array[j+1]){
        	temp = array[j];
            array[j] = array[j+1];
            array[j+1] = temp;
            j--;
        }
    }
	
    for (i=0;i<10;i++){
    	printf("%d",array[i]);
    }
    return 0;
}

μ‚½μž… 정렬은 기본적으둜 '정렬이 λ˜μ–΄μžˆλ‹€κ³  κ°€μ •'ν•œλ‹€λŠ” μ μ—μ„œ νŠΉμ •ν•œ κ²½μš°μ— λ”°λΌμ„œ ꡉμž₯히 λΉ λ₯Έ 속도λ₯Ό μžλž‘ν•œλ‹€. 반볡문이 두 번 λ“€μ–΄κ°€ μžˆμœΌλ―€λ‘œ μ‚½μž… μ •λ ¬μ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(N^2)이닀. 

i=0μΌλ•Œ, 10은 1의 μ•žκ³Ό λ’€, 즉 _ 1 _ 두 곳에 λ“€μ–΄κ°ˆ 수 μžˆλŠ”λ° 였λ₯Έμͺ½ μžλ¦¬μ— μ‚½μž…λ˜μ–΄μ•Ό μ˜€λ¦„μ°¨μˆœ 정렬이 λœλ‹€.i=1μΌλ•Œ, 5λŠ” _ 1 _ 10 _ μ„Έ 곳에 λ“€μ–΄κ°ˆ 수 μžˆλŠ”λ° 1κ³Ό 10 사이에 λ“€μ–΄κ°€μ•Ό ν•œλ‹€.

 

거의 정렬이 λ˜μ–΄μžˆλŠ” 경우λ₯Ό μƒκ°ν•΄λ³΄μž.


λ‹€μŒμ˜ μˆ«μžλ“€μ„ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ„Έμš”.

2 3 4 5 6 7 8 9 10 1


μ‚½μž…μ •λ ¬μ€ ν•„μš”ν•œ κ²½μš°μ—λ§Œ μ‚½μž…μ„ μ§„ν–‰ν•˜λ―€λ‘œ λ°μ΄ν„°κ°€ 거의 μ •λ ¬λœ μƒνƒœμ— ν•œν•΄μ„œλŠ” μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜λ³΄λ‹€λ„ λΉ λ₯΄λ‹€λŠ” νŠΉμ§•μ„ κ°€μ§€κ³  μžˆλ‹€.

 

파이썬

a = [1,10,5,8,7,6,4,3,2,9]

for i in range(len(a)-1):
  j = i
  while(a[j]>a[j+1]):
    temp = a[j]
    a[j]= a[j+1]
    a[j+1] = temp
    j -=1
a

 


이 글은 λ‚˜λ™λΉˆλ‹˜μ˜ μ‹€μ „ μ•Œκ³ λ¦¬μ¦˜ κ°•μ’Œ (Algorithm Programming Tutorial)λ₯Ό μ°Έκ³ ν•΄ μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

https://www.youtube.com/watch?v=qQ5iLNjpxSk&list=PLRx0vPvlEmdDHxCvAQS1_6XV4deOwfVrz 

 

 

728x90