'병합 정렬' 태그의 글 목록
본문 바로가기
728x90

병합 정렬3

c언어 - 병합 정렬(Merge Sort) 이전 글에서 퀵 정렬에 대해 포스팅 했다. 병합 정렬은 퀵 정렬과 매우 비슷하지만 조금 다른 정렬이다. 퀵 정렬은 피벗을 정해 정렬을 하는데 피벗을 선택하는데서 정렬의 성능이 정해진다. 병합 정렬은 배열의 크기를 반으로 쪼개 정렬해 정렬되는 속도가 일정하다. 시간 복잡도로 보면 최악 평균 최선 퀵 정렬 O(N^2) O(NlogN) O(NlogN) 병합 정렬 O(NlogN) O(NlogN) O(NlogN) 시간 복잡도를 보면 평균은 비슷 하지만 최악에서 차이가 난다. O(N^2)는 버블, 선택 정렬과 같아 느리다. 속도가 일정하다는 장점을 가지고 있다. 단점은 메모리가 필요하다. 병합과정에서 같은 사이즈의 다른 배열에 임시로 저장하기 때문이다. 이제 병합 정렬은 배열의 크기/2 의 값을 기준으로 좌, 우로.. 2021. 1. 1.
C언어 - 버블 정렬 (Bubble Sort), 버블 정렬 개선 파도타듯 두 값씩 정렬해가면서 큰 수를 맨 뒤로 보내면서 채워간다 마지막 수를 제외하고 다시 처음부터 반복하여 비교하며 정렬하는 알고리즘이다. 순차 정렬, 버블 정렬, 선택 정렬 세 정렬은 코드는 단순하나 컴퓨터 입장에서 비효율 적이여서 싫어하는 정렬이다. 비교대상이 30개 미만일 경우 사용하기에 좋다. 비교 횟수는 n-1 -> n-2 -> n-3 -> ... -> n-n+3 -> n-n+2 -> n-n-1 순으로 값이 줄어들며 비교된다. 비교하는 값은 노란색 정렬후 값은 보라색 핵심 알고리즘 void BubbleSort(int *arr,int n, int i, int j){ for(i=n-1; i>0; i--){ for(j=0; j arr[j+1]){ swap(&arr[j],&arr[j+1]); } }.. 2020. 11. 27.
C언어 - 정렬 (Sort) 정렬이란 Computer Science 에서 정렬 알고리즘은 데이터를 일정한 순서로 나열하는것이다. 흔히 사용되는 것은 숫자 정렬과 문자 정렬 (사전순 정렬)이다. 좋은 정렬을 만들기 위해 알고리즘의 최적화가 중요하다. 정렬에는 다양한 종류가 존재한다. 크게 내부 정렬과 외부 정렬이 존재하고 내부 정렬은 하나의 배열에 저장할 수 있을 경우 사용되고 외부 정렬은 데이터가 많아 하나의 배열로 저장하기 어려울때 사용된다. 외부 정렬은 내부 정렬을 응용한 정렬이기 때문에 내부 정렬을 먼저 공부하면 된다. 내부정렬에는 순차 정렬, 버블 정렬, 선택 정렬, 삽입 정렬, 쉘 정렬, 퀵 정렬, 병합 정렬, 힙 정렬, 도수정렬 등 다양하게 존재한다. 순차 정렬 자세히 보기 버블 정렬 자세히 보기 선택 정렬 자세히 보기 .. 2020. 11. 13.
728x90