키리찹의 IT노트 122

6-6. 퀵 정렬(Quick Sort)

퀵 정렬 살펴보기 가장 빠른 정렬 알고리즘 중 하나 피벗 설정과 그룹 나눔을 반복해 모든 그룹의 요소가 한 개가 되면 정렬을 마침 피벗은 마음대로 선택 가능, 양쪽 그룹 어느 곳에 포함시켜도 상관 없음 배열을 두 그룹으로 나누기 피벗: x 왼쪽 커서: pl 오른쪽 커서: pr ※ 피벗 이하의 요소를 배열 왼쪽으로, 이상의 요소를 배열 오른쪽으로 옮기기 위해 수행해야 할 작업 1. a[pl] >= x가 성립하는 요소를 찾을 때까지 pl을 오른쪽으로 스캔 2. a[pr] pr + 1인 경우에는 다음과 같은 그룹이 생길 수 있음 피버새과 일치하는 값을 가지는 그룹: a[pr + 1], ..., a[pl - 1] [실습 코드] 1 2 3 4 5 6 7 do { while(a[pl] x) pr--; if(pl

6-5. 셸 정렬(Shell Sort)

단순 삽입 정렬의 특징 a. 정렬을 마쳤거나 정렬을 마친 상태에 가까우면 정렬 속도가 매우 빨라진다(장점) b. 삽입할 위치가 멀리 떨어져 있으면 이동(대입)해야 하는 횟수가 많아진다(단점) 셸 정렬은 이러한 단순 삽입 정렬의 장점을 살리고 단점은 보완한 알고리즘이다. 셸 정렬 : 단순 삽입 정렬의 장점(a)은 살리고 단점(b)은 보완한 정렬 알고리즘으로, 도널드 셸(D. L. Shell)이 고안 먼저, 정렬할 배열의 요소를 그룹으로 나눠 각 그룹 별로 단순 삽입 정렬을 수행 각 그룹을 합치면서 정렬을 반복해 요소의 이동 횟수를 줄임 [예시] 먼저, 배열을 ※4개의 그룹으로 나누고 각 그룹별로 정렬 (4-정렬) ※4칸씩 떨어져있는 요소들로 묶음({8, 7}, {1, 6}, {4, 3}, {2, 5}) 4..

6-4. 단순 삽입 정렬(Straight Insertion Sort)

단순 삽입 정렬 선택한 요소를 그보다 더 앞쪽의 알맞은 위치에 '삽입하는' 작업을 반복해 정렬하는 알고리즘 단순 선택 정렬과 비슷하지만, 단순 선택 정렬은 값이 가장 작은 요소를 선택해 알맞은 위치로 옮긴다는 점이 다름 셔틀 정렬(shuttle sort)이라고도 함 2번째 요소부터 선택해 진행 4는 6보다 작으므로 6보다 앞쪽에 삽입, 그 다음에는 3번째 요소 1을 선택해 앞쪽에 삽입 아직 정렬되지 않은 부분의 첫 번재 요소를 정렬된 부분의 알맞은 위치에 삽입 위와 같은 작업을 n - 1회 반복하면 정렬을 마침 [알고리즘 개요] for(int i = 1; i < n; i++) { //tmp tmp; j--) { a[j] = a[j - 1]; } a[j] = tmp; } } Colored by Color ..

6-3. 단순 선택 정렬(Straight Selection Sort)

단순 선택 정렬 : 가장 작은 요소부터 선택해 알맞은 위치로 옮겨서 순서대로 정렬하는 알고리즘 가장 작은 값의 요소인 1을 선택해 정렬 시작 1과 6을 교환 이어서 두 번재로 작은 요소인 3을 선택해 정렬 => 아직 정렬하지 않은 부분에서 값이 가장 작은 요소를 선택해 아직 정렬하지 않은 부분의 첫 번째 요소와 교환하는 과정을 반복 [단순 선택 정렬의 교환 과정] 1. 아직 정렬하지 않은 부분에서 가장 작은 키의 값 (a[min])을 선택 2. a[min]과 아직 정렬하지 않은 부분의 첫 번째 요소를 교환 3. 이 과정을 n - 1회 반복 [알고리즘 개요] for(int i = 0; i < n - 1; i++) { //min = a[i], ..., a[n - 1]에서 가장 작은 작은 값을 가지는 요소의 ..

6-2. 버블 정렬(Bubble sort)

버블 정렬 : 버블 정렬은 이웃한 두 요소의 대소 관계를 비교해 교환을 반복한다. 먼저 끝에 있는 두 요소 9와 8부터 시작 오름차순으로 배열을 정렬하고자 한다면 왼쪽의 값 9와 8 교환 뒤이어 2, 3번째 요소(1, 8) 비교 1은 8보다 작으므로 교환X 같은 작업을 첫 번째 요소까지 계속한 결과 이러한 일련의 과정(비교, 교환 작업)을 패스(pass)라고 하고, 요소의 개수가 n개인 배열에서는 패스를 n - 1회 수행한다. 이어 배열의 2번째 이후 요소에 대한 비교, 교환을 하는 패스를 수행하며, 첫 번째 패스보다 1회 적은 n - 2회의 패스를 수행하게 된다. 버블 정렬 프로그램 버블 정렬 알고리즘을 프로그램으로 구현 변수 i의 값을 0부터 n - 2까지 1씩 증가하며 n - ..