버블 정렬은 주어진 파일에서 인접한 두 개의 레코드 키 값을 비교하여 그 크기에 따라 레코드 위치를 서로 교환하는 정렬 방식이다.
계속 정렬 여부를 플래그 비트(f)로 결정한다.
평균과 최악 모두 수행 시간 복잡도는 O(n2)이다.
8, 5, 6, 2, 4를 버블 정렬한다.
인접한 두개를 순서대로 모두 비교한다.
1회전은 8, 5를 비교 5, 8, 6, 2, 4가되고 다시 8, 6을 비교한다. 5, 6, 8, 2, 4가 되고 8, 2를 비교해서 5, 6, 2, 8, 4가 되고 다시 8과 4를 비교해 5, 6, 2, 4, 8이된다. 즉, 선택정렬을 거꾸로 해서 맨 마지막 값을 고정하는 정렬방식이다.
2회전은 5, 2, 4, 6, 8이된다.
3회전 종료 시 2, 4, 5, 6, 8이 되며
4회전은 2, 4를 비교하고 종료된다.
버블 정렬의 keyword는 '인접한 두 개의 레코드'이다.
퀵 정렬(Quick Sort)
퀵 정렬은 레코드의 많은 자료 이동을 없애고 하나의 파일을 부분적으로 나누어 가면서 정렬하는 방식으로 키를 기준 작은 값은 왼쪽에, 큰 값은 오른쪽 서브파일로 분해시키는 방식으로 정렬한다.
정렬 방식 중에서 가장 빠른 방식이다.
프로그램에서 되부름을 이용하기 때문에 스택(Stack)이 필요하다.
분할과 정복을 통해 자료를 정렬한다.
퀵 정렬의 keyword는 '하나의 파일을 부분적으로 나누어'이다.
힙 정렬(Heap Sort)
전이진 트리(Complete Binary Tree)를 이용한 정렬 방식이다.
힙 정렬의 keyword는 '전이진 트리(Complete Binary Tree)'이다.
구성된 전이진 트리를 Heap Tree로 변환하여 정렬한다.
평균과 최악 모두 시간 복잡도는 O(nlog2n)이다.
2-way 합병 정렬(Merge Sort)
정렬되어 있는 두 개의 파일을 한 개의 파일로 합병한다.
두개씩 묶어서 두 값을 비교하고 정렬한다.
묶은 두 값을 다시 두개로 묶어서 비교하고 정렬한다. 즉, 4개씩 묶어 정렬하는 것이다.
2n개로 계속해서 정렬하는 것이 합병 정렬이다.
2-way 합병 정렬의 keyword는 '이미 정렬된 두 개의 파일을 한 개의 파일로'이다.
기수 정렬(Radix Sort) = Bucket Sort
Queue를 이용하여 자릿수(Digit)별로 정렬하는 방식이다.
레코드의 키 값을 분석하여 같은 수 또는 같은 문자끼리 그 순서에 맞는 버킷에 분배하였다가 버킷의 순서대로 레코드를 꺼내 정렬한다.