'Computer/Algorithm'에 해당되는 글 3건
단순히 코드를 짧게 하려고 비 효율적으로 세팅해 둔게 눈에 거슬린다..
입력되는 숫자의 범위가 적당하다면 그냥 인덱스에 숫자를 넣는 방법도 있을텐데..ㅉㅉ
이때는 뭐.. 코드 짧게 하려고 별짓을 다 했던 시절이었으니.. 일단 패스..
버블 정렬의 개요
주어진 파일에서 두 개의 인접한 레코드의 키를 비교해서..
키 값에 따라 레코드의 위치를 서로 교환한다..
n개의 입력 레코드로 구성된 파일에서..
오름차순정렬의 경우 첫 번째 레코드와 두 번째 레코드의 키를 비교해서..
키 값이 작은 레코드를 앞에 위치시킨 후..
두 번째 레코드와 세 번째 레코드의 키를 비교하여..
키 값이 작은 레코드의 위치를 결정하는 과정을 반복..
마지막으로 n-1번째와 n번째 레코드를 비교하여 위치를 교환하면 1회의 반복이 완료!!..
이때 n번째 위치하는 레코드는 키 값이 가장 큰 레코드가 된다..
다시 n 번째 위치한 레코드를 제외한 나머지 n-1개의 레코드를 위와 동일한 방법으로 반복..
이때 n-1번째 위치한 레코드는 두 번째로 큰 레코드가 된다..
이와 같은 작업을 반복 수행하며 마지막 n-1회의 반복에서는..
첫 번째와 두 번째 레코드의 키를 비교하여 작은 키 값을 가진 레코드를..
첫 번째에 위치시킴으로써 모든 작업이 완료됨..
버블 정렬의 특징
- 레코드를 계속 교환하므로 레코드의 크기가 큰 경우에 불리
- 거의 정렬이 된 화일일 경우 유리
- 안정적인 제자리 정렬
버블정렬의 구조는 다음과 같다.
선택 정렬의 개요
배열 0 1 2 3 4 5 6 7 8 9
원소 10개 8,10, 4, 3 , 9 ,7 , 6, 2 ,1, 5
이러한 정렬되지 않은 원소들이 있다.
--------------------->
9 개의 원소를 순환한다. i=0 , min=0 -> min=8
------------------>
8 개의 원소를 순환한다. i=1 , min=1 -> min=7
.
.
.
선택정렬은 처음 원소 배열 0위치를 min 값에 넣고 다른 모든 원소 9개를 순환한다..
순환하면서 현재 min 값보다 작은 값들이 있으면..
그 값을 min에 주소값 i를 넣어주고 계속 회전을 한다..
첫번째 회전이 끝나면, min에는 가장 작은 값을 가지고 있는 배열 주소가 저장된다.
각 루프가 끝나면 min 주소값의 원소와 시작 i의 원소를 바꾼다.
선택정렬의 특징
- 레코드가 실제로 교환되는 것은 많아야 한번 뿐이므로..
작은 키와 매우 큰 레코드를 가지는 화일을 정렬하는데 적합하다.
(적합하다고 하나, 거의 사용 안한다.)
- 실행 시간은 입력 자료의 순서에 민감하지 않다.
(거의 정렬되거나 안되거나 상관없다.)
- 제자리 정렬
(배열의 길이가 변하지 않는다.)
- 불안정적
(원소의 순서가 처음보다 뒤죽박죽으로 된다.)
선택 정렬의 구조는 다음과 같다.