정보처리기사/소프트웨어 개발

데이터 입출력 구현 7

RangA 2023. 5. 13. 22:04

정렬(Sort)

01. 정렬의 종규

1) 정렬의 개념

  • 여러 개의 자료를 순서에 따라 나열하는 방법
  • 자료에 속한 키 값에 따라 오름차순과 내림차순으로 정렬
  • 키 값이란 자료의 자신이 될 수도 있고, 레코드의 특정 필드가 될 수도 있음

2) 정렬의 종류

  • 자료의 개수, 자료의 특성에 따라 종류가 나뉨
  • 기수 : 정렬할 자료의 자릿수의 값을 의미
  정렬의 종류     특징  
  선택 정렬     큰(작은) 키 값을 찾아 교환  
  버블 정렬     인접한 키 값을 교환, 이미 정렬되었으면 중단함  
  삽입 정렬     자신의 위치를 찾아서 삽입  
  쉘 정렬     삽입 정렬을 개선한 방법  
  퀵 정렬     자료의 중간 값을 정한 후 정렬  
  힙 정렬     이진 트리 구조를 만들어 정렬  
  이진 병합 정렬     두 개의 키를 한 쌍으로 정한 후 정렬  
  버킷 정렬     기수 값에 따라 분배하여 정렬하는 방식  

3) 정렬의 시간 복잡도

  • 입력되는 자료의 수와 자료의 형태에 따라 연산 횟수는 다를 수 있음
  • 연산 횟수가 적을 때는 최선, 연산 횟수가 가장 많을 때는 최악, 그리고 평균적인 경우로 구분
  정렬의 종류     최상     평균     최악  
  선택 정렬     O(n)     O(n2)     O(n2)  
  버블 정렬     O(n2)     O(n2)     O(n2)  
  삽입 정렬     O(n2)     O(n2)     O(n2)  
  쉘 정렬     O(n)     O(n1.5)     O(n1.5)  
  퀵 정렬     O(nlog2n)     O(nlog2n)     O(n2)  
  힙 정렬     O(nlog2n)     O(nlog2n)     O(nlog2n)  
  이진 병합 정렬     O(nlog2n)     O(nlog2n)     O(nlog2n)  
  버킷 정렬     O(dn)     O(dn)     O(dn)  



02. 선택 정렬(Selection Sort)

1) 선택 정렬의 개념

  • 오름차순으로 정렬했을 때 가장 작은 값을 찾아 선택된 위치 자료와 교환하는 방법
  • 가장 작은 값을 먼저 결정하는 경우, 가장 작은 값이 1번째로 결정되며, 2번째, 3번째 작은 값 순으로 결정됨
  • 가장 큰 값을 먼저 결정하는 경우, 가장 큰 값이 1번째로 결정되며, 2번째, 3번째 큰 값 순으로 결정됨
  • 1번째 자료가 결정되면 1번째를 제외한 2번째 이후의 자료들이 정렬 대상
  • 선택 정렬은 각 Pass 단계에서 여러 번 교체할 수 있고, 한 번만 교체할 수 있음



03. 버블 정렬(Bubble Sort)

1) 버블 정렬의 개념

  • 주어진 파일에서 인접한 두 개의 레코드 키 값을 비교하며 그 크기에 따라 레코드 위치를 서로 교환하는 정렬 방식
  • 1번째, 2번째와 비교, 2번째와 3번째와 비교, 3번째와 4번째와 비교하면서 자료를 교환함
  • 오름차순으로 정렬하였을 때 마지막 자료가 먼저 결정됨
  • 마지막 자료가 결정되면 마지막 자료를 제외한 자료들이 정렬 대상



04. 삽입 정렬(Insertion Sort)

1) 삽입 정렬의 개념

  • 첫 번째 자료를 기준으로 두 번째부터 차례로 비교하여 자기 위치를 찾아 삽입하는 정렬 방법
  • 정렬할 자료 일부가 정렬되어 있는 경우에 유리한 방법
  • 임의의 자료가 중간에 삽입되는 경우에는 삽입 위치 이후에 있는 자료들은 한 칸씩 위치 이동함



05. 쉘 정렬(Shell Sort)

1) 쉘 정렬의 개념

  • 삽입 정렬의 단점을 보완하여 확장한 개념으로 간격을 정하고 간격을 점차 줄이면서 삽입 정렬하는 방법
  • 임의의 레코드 키와 매개변수 값만큼 떨어진 곳의 레코드 키를 비교하여 순서화 되어 있지 않으면 서로 교환하는 것을 반복하는 정렬 방식
  • 쉘 정렬은 자료가 많은 경우에 삽입 정렬보다 비교 횟수가 줄어듦
  • 10개의 자료에서 간격이 5라면 1번째 자료와 6번째 자료를 비교하게 됨
  • 자료 수가 n개일 때 가장 이상적인 처음의 간격
    • 간격 = 1.723√n
    • 10개의 자료가 있다면 가장 이상적인 처음의 간격은 1.723√10 = 3.705.. 이므로 3이나 4로 정하면 됨
  • 정렬 대상 자료량이 많을 때 유리한 방식
  • 입력 파일이 부분적으로 정렬되어 있는 경우 유리한 방식



06. 힙 정렬(Heap Sort)

1) 힙 정렬의 개념

  • 임의의 자료에서 최솟값 또는 최댓값을 구할 경우 가장 적합한 정렬 방법
  • 자료를 순서적으로 완전 이진 트리 형태로 만들어 정렬하는 방법
  • 하위 노드 그룹으로부터 상위 노드 그룹으로 점차 확대하는 방법
  • 오름차순 정렬인 경우에 자노드가 부노드보다 크면 자료를 교환함
  • 시작하는 하위 노드 그룹의 결정 공식
    • k : 시작 하위 노드 그룹, n : 전체 자료 수
    • k = n/2



07. 이진 병합 정렬(2-Way Merge Sort)

1) 이진 병합 정렬의 개념

  • 정렬 대상의 자료들을 그룹별로 정렬하여 병합하면서 정렬하는 방법



08. 버킷 정렬(Bucket Sort)

1) 버킷 정렬의 개념

  • 스택(Stack)을 이용하여 정렬하는 방법
  • 레코드의 키 값을 분석하여 같은 값끼리 그 순서에 맞는 버킷에 분해하였다가 버킷의 순서대로 레코드를 꺼내어 정렬



09. 퀵 정렬(Quick Sort)

1) 퀵 정렬의 개념

  • 레코드의 많은 자료 이동을 없애고 하나의 파일을 부분적으로 나누어 가면서 정렬하는 방식
  • 레코드의 키를 기준으로 작은 값은 왼쪽에 큰 값은 오른쪽 서브 파일로 분해하여 정렬하는 방식
  • 정렬 방식 중에서는 가장 빠른 방식이며, 프로그램에서 재귀적 함수를 이용하기 때문에 스택을 필요로 함