본문 바로가기

알고리즘11

힙 정렬 ( Heap sort ) 힙정렬시간복잡도가 O(nlogn)으로 퀵정렬, 병합정렬과 같은 시간복잡도를 가진 정렬 알고리즘병합정렬과는 다르게 추가적인 메모리 필요 X항상 O(nlogn)의 성능을 보여주기 때문에 최악의 경우 O(n^2)의 성능을 보이는퀵정렬보다 안정적인 성능을 보인다.이론적으로는 퀵 정렬 병합 정렬보다 우위에 있지만, 단순히 속도만 가지고 본다면 퀵 정렬이평균적으로 더 빠르기 때문에 힙 정렬이 많이 사용되지는 않는다.배열을 최대힙 or 최소힙으로 만들어 root에 있는 값을 정렬하는 식으로 구현한다.힙(Heap)완전이진트리 형태의 자료구조힙은 최소힙과 최대힙 두가지로 나뉜다.힙은 일반적인 배열로 표현할 수 있다.  최대 힙 : "부모 노드 > 자식 노드"를 모든 노드에서 만족하는 완전이진트리   최소 힙 : "부모 .. 2022. 2. 11.
병합 정렬 ( Merge sort ) 병합 정렬- 분할 정복(Divide & Conquer) 방법을 사용하는 알고리즘- 알고리즘을 구현함에 있어서 추가적인 임시 배열이 필요 ( 다른 정렬 알고리즘보다 메모리를 더 잡아먹음 )  시간 복잡도O(N * logN)   퀵 정렬 vs 병합 정렬퀵 정렬은 최악의 경우 O(N * logN) 을 보장하지 못함 ( 최악의 경우 => O(N^2) )병합 정렬은 최악의 경우에도 O(N * logN)을 보장함둘 다 O(N*logN)만큼 걸리더라도 보통 병합 정렬보다 퀵 정렬이 더 빠름 병합 정렬의 동작 원리 분할 ( 가장 작은 단위까지 분할 )   :   하나의 list를 두 개의 균등한 크기로 분할 정렬 ( 가장 작은 단위부터 정렬 )   :   분할된 부분 list를 정렬          =>  위 1,2 .. 2022. 2. 9.
버블 정렬 ( Bubble sort ) 버블 정렬- 바로 옆에 있는 값과 비교하면서 비교할 때마다 값을 스위칭하면서 이동- 선택 정렬과 시간 복잡도는 같지만 실제 수행시간이 가장 느림    => 버블 정렬 : 매번 비교할 때마다 값을 스위칭   => 선택 정렬 : 전체 원소를 비교해서 최솟값을 찾은 후 가장 마지막에만 값을 스위칭 시간 복잡도- O(N^2) #include#includeint main(){ int data[] = {1,5,9,8,2,5,6,3,7,10}; int i,j; for(i = 0; i data[j+1]) std::swap(data[j],data[j+1]); } } for(i=0;i 2022. 2. 9.
삽입 정렬(insertion sort) 삽입 정렬적절한 위치에 삽입한다.버블 정렬, 선택 정렬보다 빠르다.삽입 정렬은 옆의 값과 비교해서 더 클 때만 스위칭하기 때문에 더 빠르다.특정한 경우에 굉장히 빠르게 작용할 수 있다. ( 예 : 거의 정렬되어 있는 데이터일 때 ) 시간 복잡도    =>    O(N^2) 동작 원리- 특정한 위치에서 앞의 원소들과 비교해서 적당한 위치에 들어간다.ex) 1 5 6 7 8 10 4 3 2 9        => 4가 적절한 위치에 들어갈 때 이미 앞 부분은 다 정렬이 되어 있기 때문에 4만 앞의 원소들과 하나씩          비교해가며 들어가면 되기 때문에 매번 비교할 때마다 선택이나 버블처럼 교환하지 않아도 된다.        1 5 6 7 8 4 10 3 2 9  ->  4와 8 비교해서 자리 바꿈  .. 2022. 2. 8.
퀵정렬(Quick Sort) 퀵 정렬데이터의 갯수가 적을 때는 괜찮지만 데이터의 갯수가 10만 개만 넘어가도 보통의 상황에서선택,버블,삽입 정렬 알고리즘을 사용하기가 힘들다. 이런 경우 퀵 정렬을 사용한다면아무리 많은 양의 데이터라도 빠르게 정렬을 할 수 있다.대표적인 분할 정복 알고리즘c 라이브러리로 제공하는 sort() 함수가 퀵 정렬을 기반으로 구현되어 있다.이미 정렬이 되어있거나 거의 정렬되어 있는 데이터에 사용할 때는 성능이 매우 떨어짐 퀵 정렬의 시간 복잡도평균  :  O(N * logN)    -> 반씩 쪼개서 정렬하기 떄문에 logN인 것이다.최악  :  O(N^2) 퀵 정렬이 최악인 경우에도 O(N * logN)을 보장하는 방법- STL 라이브러리에서 제공하는 sort() 함수는 퀵 정렬을 기반으로 하되 별도의 처리.. 2022. 2. 7.