130 likes | 425 Vues
2.5 정렬 (Sorting). 1. 내부정렬 (1) 삽입법 - 삽입 정렬 (insertion sort) - 셀 정렬 (shell sort) (2) 선택법 - 힙 정렬 (heap sort) (3) 교환법 - 퀵 정렬 (quick sort) - 셀렉션 정렬 (selection sort)
E N D
2.5 정렬(Sorting) 1. 내부정렬 (1) 삽입법 - 삽입 정렬(insertion sort) - 셀 정렬(shell sort) (2) 선택법 - 힙 정렬(heap sort) (3) 교환법 - 퀵 정렬(quick sort) - 셀렉션 정렬(selection sort) - 버블 정렬(bubble sort) (4) 분배법 - 기수정렬(radix sort) (5) 병합법 - 2_way_merge 2. 외부정렬 (1) 균형 합병 정렬(balanced merge sort) (2) 다단계 합병 정렬(polyphase merge sort) (3) 계단식 합병 정렬(cascade merge sort) (4) 오실레이팅 합병 정렬(oscillating merge sort)
10 6 8 9 5 6 10 8 9 5 6 8 10 9 5 6 8 9 10 5 5 6 8 9 10 (1) 삽입법 ① 삽입 정렬(insertion sort) - 한 레코드씩 차례로 서로 비교한 후 크기에 따라 순서대로 정렬하는 방법 - 가장 간단한 방법으로 어느 정도 정렬이 되어 있을 경우 매우 효과적 - 예) 초기단계 1회전 2회전 3회전 4회전 - 평균 비교 횟수 : n(n-1)/4 (데이터가 부분적으로 정렬된 경우) 최대 비교 횟수 : n(n-1)/2 (데이터가 역순으로 된 경우) 최소 비교 횟수 : n-1 (데이터가 이미 정렬된 경우) 연산시간 : O(n2)
② 셀 정렬(shell sort) - 매개변수의 값을 점점 감소시키면서 정렬하는 방법 (매개변수가 1이되면 정렬완료) - 예) 초기상태 : 11 5 3 7 9 매개변수(d) = 3일 때 sort1 11 5 3 7 9 7 5 3 11 9 매개변수(d) = 2일 때 sort2 7 5 3 11 9 3 5 7 11 9 매개변수(d) = 1일 때 sort3 3 5 7 11 9 3 5 7 9 11 - 연산시간 : 최악 O(nlog2n) 평균 O(n n)
29 29 67 29 30 30 57 30 21 13 13 21 45 45 67 67 57 50 57 55 16 16 16 16 13 21 21 13 18 18 18 18 67 45 30 45 55 57 55 29 29 21 67 16 13 45 57 18 30 55 (2) 선택법 ① 힙 정렬(heap sort) - 자식 노드의 값이 부모 노드보다 작지 않은 전이진 트리의 힙 구조를 이용 (트리정렬) - 정렬 속도가 빠르다. - 예) - 연산시간 : O(nlog2n)
1 2 3 4 5 6 7 8 9 10 11 12 13 9 73 42 1 80 39 72 30 100 46 82 32 17 9 17 42 1 32 39 46 30 72 100 82 80 73 9 17 30 1 32 39 46 42 72 100 82 80 73 9 1 17 30 32 39 42 46 72 73 80 82 100 1 9 17 30 32 39 42 46 72 73 80 82 100 (3) 교환법 ① 퀵 정렬(quick sort) - 특정 키 값을 기준키로 하여 기준키보다 작은 값과 큰 값을 분리하여 정렬 - 정렬 속도가 빠르다. - 예) No. - 연산시간 : O(nlog2n)
15 10 5 7 8 5 15 10 7 8 5 7 15 10 8 5 7 8 15 10 5 7 8 10 15 ② 셀렉션 정렬(selection sort) - 차례대로 최소값을 맨 앞으로 이동하여 정렬 - interchange sort - 예) 초기단계 - 평균비교횟수 : n(n-1)/2 연산시간 : O(n2)
9 4 6 10 8 9 4 6 10 8 4 6 9 8 10 4 6 9 8 10 4 6 8 9 10 ③ 버블 정렬(bubble sort) - 인접한 레코드 값들끼리 비교하여 자리 교환을 통해 정렬 - shifting sort, transposition sort - 예) 초기단계 1단계 2단계 - 최대비교횟수 : n(n-1)/2 평균비교횟수 : n(n-1)/4 최소비교횟수 : n-1 (flag를 두는 경우) 연산시간 : O(n2)
bucket 0 1 2 3 4 5 6 7 8 9 10 1 82 13 24 5 8 19 queue 31 63 74 48 bucket 0 1 2 3 4 5 6 7 8 9 1 10 24 31 48 63 74 82 queue 5 13 8 19 (4) 분배법 ① 기수 정렬(radix sort) - 여러 개의 queue에 나누어 십진수 자리별로 분배한 다음 FIFO방식으로 정렬 - 정렬하려는 키의 개수가 n이면 n개의 버켓(bucket)이 필요(bucket sort, 다중키 정렬) - 정렬시간은 빠르나 많은 queue가 필요 - 예) 초기데이터 1, 19, 24, 13, 31, 8, 82, 48, 74, 63, 5, 10 ① 1단위 숫자에 대한 배열 분류 : 10, 1, 31, 82, 13, 63, 24, 74, 5, 8, 48, 19 ② 10단위 숫자에 대한 배열 분류 : 1, 5, 8, 10, 13, 19, 24, 31, 48, 63, 74, 82 - 연산시간 : O(d(n+q)) (d:키의 수, n:레코드의 수, q:큐의 수)
19 11 26 43 92 87 21 38 11 19 26 43 87 92 21 38 11 19 26 43 21 38 87 92 11 19 21 26 38 43 87 92 (5) 병합법 ① 2-Way Merge 정렬 - 완전히 정렬이 된 서로 다른 두 개의 파일을 혼합하여 정렬된 한 개의 파일로 작성 - 예) 초기데이터 19, 11, 26, 43,92, 87, 21, 38 (8개) 초기단계 1단계 2단계 3단계 - 연산시간 : O(nlog2n)
2. 외부정렬 대용량의 데이터를 몇 개의 서브파일(run)로 나누어 각각 정렬한 후에 테이프나 디스크 내에 서 각 서브파일을 합병하는 방법 (1) 균형 합병 정렬(balanced merge sort) - 자기 테이프에 의한 정렬 중 가장 기본 - 입/출력 파일 수를 같은 수로 배정해서 앞에서 출력된 파일을 다음 번 입력 파일로 사용 (2) 다단계 합병 정렬(polyphase merge sort) - 피보나치 순열에 의해 m개의 입력 run(서브 파일)들을 테이프에 분배해서 정렬 (3) 계단식 합병 정렬(cascade merge sort) - 피보나치 순열을 사용 - 처음에는 m개의 입력 파일을 합병하고, 다음에는 m-1개, 다음에는 m-2개의 파일을 합병하고, 최종적으로 하나의 테이프에 수록될 때까지 반복 수행하여 작업 종료 (4) 오실레이팅 합병 정렬(oscillating merge sort) - 양방향이 가능한 테이프를 사용하는 정렬 방식 (역으로 읽기 기능 유효)
◆ 다시 한 번 1. 내부정렬 (1) 삽입법 - 삽입 정렬(insertion sort) : 하나씩 증가하며 비교 - 셀 정렬(shell sort) : 매개변수 (2) 선택법 - 힙 정렬(heap sort) : tree sort (3) 교환법 - 퀵 정렬(quick sort) : 큰 값, 작은 값으로 분리 - 셀렉션 정렬(selection sort) : 작은 값을 찾아 앞으로 - 버블 정렬(bubble sort) : 인접한 것과 비교 (4) 분배법 - 기수정렬(radix sort) : 1의 자리 기준 -> 10의 자리 기준 (5) 병합법 - 2_way_merge : (2개 -> 4개 -> 8개) subfile 2. 외부정렬 (1) 균형 합병 정렬(balanced merge sort) (2) 다단계 합병 정렬(polyphase merge sort) (3) 계단식 합병 정렬(cascade merge sort) (4) 오실레이팅 합병 정렬(oscillating merge sort)
기출 . 예상 문제 1. 다음 중 주기억장치 내에서 이루어지는 정렬 방법은? ① oscillation sort ② balanced sort ③ polyphase sort ④ insertion sort 2. 레코드의 많은 자료 이동을 없애고 하나의 파일을 부분적으로 나누어 가면서 정렬하는 방법으로 키를 기준으로 작은 값은 왼쪽에 큰 값은 오른쪽에 모이도록 교환시키는 부분 교환 정렬법은? ① 퀵 정렬 (quick sort) ② 쉘 정렬 (shell sort) ③ 삽입 정렬 (insertion sort) ④ 선택 정렬 (selection sort) 3. 다음은 어떤 정렬 방법을 설명한 것인가? - 두 개의 키들을 한 쌍으로 하여 각 쌍에 대하여 순서를 정한다. - 순서대로 정렬된 각 쌍의 키들을 합병하여 하나의 정렬된 서브 리스트로 만든다. - 위 과정의 정렬된 서브 리스트들을 하나의 정렬된 파일이 될 때까지 반복한다. ① 2-way-합병 정렬 ② 퀵 정렬 ③ 기수 정렬 ④ 버블 정렬
기출 . 예상 문제 4. 아래 자료에서 65를 찾기 위하여 2진 검색할 경우 비교해야 할 횟수는? 3, 18, 47, 54, 65, 83, 94, 97 ① 2 ② 3 ③ 4 ④ 5 5. 자료가 아래와 같을 때, 삽입(insertion) 정렬 방법을 적용하여 오름차순으로 정렬할 경우 pass1 을 수행한 결과는? 자료 : 20, 19, 14, 16, 18 ① 19, 20, 14, 16, 18 ② 14, 20, 19, 16, 18 ③ 14, 19, 20, 16, 18 ④ 20, 14, 19, 16, 18 6. 외부 정렬(external sort)에 해당하지 않는 것은? ① balanced sort ② cascade sort ③ heap sort ④ polyphase sort