정렬 알고리즘 1부 - 선택,버블,삽입, 쉘 정렬
DevHwanㅤ
·2018. 7. 25. 23:55
선택정렬
선택정렬은 정렬 방법 중에 가장 간단한 방법 중의 하나다. 기본적인 방법은 제일 처음에 있는 키를 가지고 나머지
키와 비교하여 제일 작은 키값을 가지는 데이터와 위치를 바꾼다. 다음에는 두 번째 위치한 데이터의 키를 가지고 세 번째
이후의 데이터가 가지고 있는 키와 비교하여 마찬가지로 제일 작은 키값을 가지는 데이터와 위치를 바꾼다..
이렇게 해서 맨 마지막 바로 전 데이터와 마지막 데이터를 비교하는 순서까지 반복하면 데이터가 오름차순으로
정렬된다!
1 2 3 4 5 6 7 8 9 10 11 12 | void selectionSort(int Keys[], int n){ int i,Min; for(i=0; i < n-1; i++){ Min = i; for(j = i+1; j < n; j++){ if(&keys[j] < & keys[Min]){ Min = j; } } swap(&keys[i], &keys[Min]); } } 선택 정렬 알고리즘 | cs |
선택 정렬은 2가지의 기본 연산으로 이뤄지는데 먼저 최솟값을 찾기 위한 비교 연산을 사용하고 두 번째로는 찾은 값과 비교한 대상의
위치를 교환하여 주는 교환 연상을 사용한다.
선택 정렬은 주어진 배열 안에서 자료들의 이동을 최소화하려는 목적으로 만들어진 목적에 맞게 자료의 양이 적을 때 아주 좋은
성능을 나타낸다. 시간 복잡도는 O(n²)이다. 구현하기 쉬운 알고리즘 중 하나 인 것 같다.
버블 정렬
버블 정렬은 주어진 데이터에서 2개의 인접한 데이터를 비교하여 오름차순이면 작은 데이터를, 왼쪽으로 내림차순이면 큰 데이터를
오른쪽으로 위치시키면서 마지막 데이터까지 반복하는 것을 순차적으로 진행하여 정렬하는 방법을 말합니다..
선택 정렬과 같이 구현하기 쉽고 이해하기 쉽습니다.
1 2 3 4 5 6 7 8 9 | void bubbleSort(int Keys[], int n){ int i, j; for(i=n-1; i >= 1; i--){ for(j=0; j<i; j++) if(&keys[j]<keys[j+1){ swap(&keys[j], &keys[j+1]); } 버블 정렬 알고리즘 | cs |
버블 정렬의 평균 비교 횟수는 O(n²) 입니다. 버블정렬은 수행 속도가 느리므로 잘 사용하지 않고 안전성은 유사하지만 성능이
아주 미흡하고 최솟값부터 찾아나가는 선택 정렬과 반대로 최댓값을 찾는 작업을 수행하고 대충 정렬하는 것을 동시에
반복 수행하므로 수행시간이 길어지는 단점이 있습니다.
삽입 정렬
삽입 정렬은 매우 간단한 방법으로 적은 양의 데이터를 처리하는 데 매우 유용합니다. 가장 먼저 첫 번째 데이터와 두 번째 데이터를
비교하여 오름차순으로 정렬한다. 이렇게 정렬한 2개의 데이터를 하나의 서브파일로 간주하고 이것과 세 번째 데이터를 비교 하여
오름차순 정렬이 되도록 알맞은 위치에 세 번째 데이터를 삽입 시킵니다.. 이러한 방법으로 마지막 데이터까지 반복합니다.
1 2 3 4 5 6 7 8 9 10 11 12 | void insertionSort(int Keys[], int n){ int i, j, addKey; for(i=1; i < n; i++){ addKey = keys[i] j=i; while(keys[j-1]>addKey){ keys[i] = keys[j-1]; j=j-1; } keys[j] = addKey; } } 삽입 알고리즘 | cs |
'노트정리 > 자료구조' 카테고리의 다른 글
[그래프 알고리즘] 깊이 우선 탐색(DFS) 와 너비 우선 탐색(BFS) (0) | 2018.08.01 |
---|---|
정렬 알고리즘 3부 - 계수,기수,버킷 정렬 (0) | 2018.07.26 |
정렬알고리즘2부 - 퀵,합병,히프 정렬 (0) | 2018.07.26 |
[자료구조] 그래프에 대해 (0) | 2018.07.24 |
[자료구조] 큐와 스택 (0) | 2018.07.24 |