정렬: Difference between revisions

From CS Wiki
No edit summary
No edit summary
Line 1: Line 1:
[[분류:알고리즘]][[분류:정보처리기사]]
[[분류:알고리즘]]
[[분류:정보처리기사]]
 
;sort
;sort
;파일을 구성하는 각 레코드를 특정 키 항목을 기준으로 오름차순/내림차순으로 재배열하는 작업을 말한다
;파일을 구성하는 각 레코드를 특정 키 항목을 기준으로 오름차순/내림차순으로 재배열하는 작업을 말한다


== 실행 방법에 따른 분류 ==
==실행 방법에 따른 분류==
비교식 정렬(comparative sort)와 분산식 정렬(distribute sort)가 있다.
비교식 정렬(comparative sort)와 분산식 정렬(distribute sort)가 있다.


== 기억장치에 따른 분류 ==
==기억장치에 따른 분류==
=== 내부정렬기법 ===
===내부정렬기법===
 
;데이터량이 적을 때 주기억장치 내에서 정렬하는 방법
;데이터량이 적을 때 주기억장치 내에서 정렬하는 방법
;속도는 빠르나 기억장치의 용량을 초과하는 대용량 자료의 정렬이 어려룸
;속도는 빠르나 기억장치의 용량을 초과하는 대용량 자료의 정렬이 어려룸
* '''삽입 정렬(Insertion Sort)'''
** 이미 순서화된 파일에 새로운 레코드를 추가하여 순서에 맞게 배치 (2번째 값부터 시작한다)
** 시간 복잡도: O(n²)


* '''셸 정렬(Shell Sort) '''
*'''[[삽입 정렬|삽입 정렬(Insertion Sort)]]'''
** 시간 복잡도: O(n^1.5)
**이미 순서화된 파일에 새로운 레코드를 추가하여 순서에 맞게 배치 (2번째 값부터 시작한다)
**시간 복잡도: O(n²)
 
*'''[[셀 정렬|셸 정렬(Shell Sort)]] '''
**시간 복잡도: O(n^1.5)
 
*'''[[선택 정렬|선택 정렬(Selection Sort)]]'''
**레코드의 최소값을 찾아 첫번째 위치에 놓고 다음 최소값을 찾아 두번째 위치에 놓는 방법을 반복하여 정렬
**시간 복잡도: O(n²)
 
*'''[[버블 정렬|버블 정렬(Bubble Sort)]]'''
**인접한 값과 비교하여 정렬하는 방식. 끝에 값부터 정해진다.
**시간 복잡도: O(n²)
 
*'''[[퀵 정렬|퀵 정렬(Quick Sort)]]'''
**시간 복잡도: O(nlog₂n)


* '''선택 정렬(Select Sort)'''
*'''[[힙 정렬|힙 정렬(Heap Sort)]]'''
** 레코드의 최소값을 찾아 첫번째 위치에 놓고 다음 최소값을 찾아 두번째 위치에 놓는 방법을 반복하여 정렬
**정렬한 입력 레코드들로 힙을 구성하고 가장 큰 키값을 갖는 루트 노드를 제거하는 과정을 반복하여 정렬하는 기법
** 시간 복잡도: O()
**시간 복잡도: O(nlog₂n)


* '''버블 정렬(Bubble Sort)'''
*'''[[병합 정렬|병합 정렬(Merge Sort)]]'''
** 인접한 값과 비교하여 정렬하는 방식. 끝에 값부터 정해진다.
**시간 복잡도: O(nlog₂n)
** 시간 복잡도: O()


* '''정렬(Quick Sort)'''
*'''[[기수 정렬|기수 정렬(Radix Sort)]]'''
** 시간 복잡도: O(nlog₂n)
**시간 복잡도: O(n)


* '''힙 정렬(Heap Sort)'''
===외부정렬기법===
** 시간 복잡도: O(nlog₂n)


* '''병합 정렬(Merge Sort)'''
;대용량의 데이터를 몇 개의 서브 파일로 나누어 각각 내부 정렬을 한 후에 테이프나 디스크 내에서 각 서브파일을 합병하는 방법
** 시간 복잡도: O(nlog₂n)


* '''기수 정렬(Radix Sort)'''
*속도는 느리지만 자료의 대용량 자료를 정렬할 수 있음
** 시간 복잡도: O(n)
*진동 병합 정렬(Oscillating Merge Sort)
*캐스케이드 병합 정렬(Cascade Merge Sort)
*폴리파즈 병합 정렬(Polyphase Merge Sort)
*균형 병합 정렬(Balance Merge Sort)


=== 외부정렬기법 ===
==정렬 알고리즘의 선택시 고려사항==
; 대용량의 데이터를 몇 개의 서브 파일로 나누어 각각 내부 정렬을 한 후에 테이프나 디스크 내에서 각 서브파일을 합병하는 방법
* 속도는 느리지만 자료의 대용량 자료를 정렬할 수 있음
* 진동 병합 정렬(Oscillating Merge Sort)
* 캐스케이드 병합 정렬(Cascade Merge Sort)
* 폴리파즈 병합 정렬(Polyphase Merge Sort)
* 균형 병합 정렬(Balance Merge Sort)


== 정렬 알고리즘의 선택시 고려사항 ==
#키값들의 분포 상태
# 키값들의 분포 상태
#소요공간 및 작업시간
# 소요공간 및 작업시간
#정렬에 필요한 기억공간의 크기
# 정렬에 필요한 기억공간의 크기
#데이터의 양
# 데이터의 양
#초기 데이터의 배열상태
# 초기 데이터의 배열상태
#사용 컴퓨터 시스템의 특성
# 사용 컴퓨터 시스템의 특성

Revision as of 08:11, 13 February 2022


sort
파일을 구성하는 각 레코드를 특정 키 항목을 기준으로 오름차순/내림차순으로 재배열하는 작업을 말한다

실행 방법에 따른 분류

비교식 정렬(comparative sort)와 분산식 정렬(distribute sort)가 있다.

기억장치에 따른 분류

내부정렬기법

데이터량이 적을 때 주기억장치 내에서 정렬하는 방법
속도는 빠르나 기억장치의 용량을 초과하는 대용량 자료의 정렬이 어려룸
  • 삽입 정렬(Insertion Sort)
    • 이미 순서화된 파일에 새로운 레코드를 추가하여 순서에 맞게 배치 (2번째 값부터 시작한다)
    • 시간 복잡도: O(n²)
  • 선택 정렬(Selection Sort)
    • 레코드의 최소값을 찾아 첫번째 위치에 놓고 다음 최소값을 찾아 두번째 위치에 놓는 방법을 반복하여 정렬
    • 시간 복잡도: O(n²)
  • 버블 정렬(Bubble Sort)
    • 인접한 값과 비교하여 정렬하는 방식. 끝에 값부터 정해진다.
    • 시간 복잡도: O(n²)
  • 힙 정렬(Heap Sort)
    • 정렬한 입력 레코드들로 힙을 구성하고 가장 큰 키값을 갖는 루트 노드를 제거하는 과정을 반복하여 정렬하는 기법
    • 시간 복잡도: O(nlog₂n)

외부정렬기법

대용량의 데이터를 몇 개의 서브 파일로 나누어 각각 내부 정렬을 한 후에 테이프나 디스크 내에서 각 서브파일을 합병하는 방법
  • 속도는 느리지만 자료의 대용량 자료를 정렬할 수 있음
  • 진동 병합 정렬(Oscillating Merge Sort)
  • 캐스케이드 병합 정렬(Cascade Merge Sort)
  • 폴리파즈 병합 정렬(Polyphase Merge Sort)
  • 균형 병합 정렬(Balance Merge Sort)

정렬 알고리즘의 선택시 고려사항

  1. 키값들의 분포 상태
  2. 소요공간 및 작업시간
  3. 정렬에 필요한 기억공간의 크기
  4. 데이터의 양
  5. 초기 데이터의 배열상태
  6. 사용 컴퓨터 시스템의 특성