일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 문자열
- 3차원 배열
- scanf
- 연결리스트
- 테트리스
- 포인터
- 이진탐색#binary_search
- 버블
- C
- 오목#함수#gotoxy#금수#알고리즘#2차원#배열#실무#프로젝트
- string
- Time
- C언어
- 구조체
- 난수
- 배열
- 구현
- crud
- 함수
- 알고리즘
- 삽입
- 콘솔
- 파일입출력
- 커서
- 정렬
- 셀
- 공백
- 선택
- Windows API
Archives
- Today
- Total
C언어 알고리즘 정리 및 실무 프로젝트
C언어의 병합정렬 (merge_sort) 알고리즘 본문
반응형
초보자분들이 이해하시기에는 어려운 정렬 방법입니다.
이 블로그에 있는 (선택, 삽입, 버블, 셀 정렬)을 먼저 이해하신 뒤에 보시는 것을 추천드립니다.
장점: 다른 정렬방법보다 수행 속도가 빠르고 효율적이다.
단점: 퀵 정렬과 다르게 <stdlib.h>에 구현되어 있지 않아서 직접 코드를 짜야 하는 불편함이 있다.
사용 방법: merge_sort(원본 배열, 정렬되어 저장될 배열, 첫 번째 인덱스, 마지막 인덱스)
void merge(int a[], int b[], int left, int right) { // 병합 (분할된 세트를 정렬하면서 합침.)
int l = left; // 왼쪽 집합의 시작점
int mid = (left + right) / 2; // 왼쪽 집합의 마지막 지점
int j = mid + 1; // 오른쪽 집합의 시작점
int compare = left; // 정렬된 값을 b에 대입하기 위한 변수
while (l <= mid && j <= right) {
if (a[l] > a[j]) // 오른쪽이 더 작을 때 (바꿔서 저장)
b[compare++] = a[j++]; // 오른쪽 값을 왼쪽에 저장
else // 왼쪽이 더 작을 때 (그대로 둠)
b[compare++] = a[l++]; // 왼쪽 값을 왼쪽에 저장
}
while (l <= mid) { // 중간보다 작을 때, 계속 돌아감.
b[compare++] = a[l++]; // 아직 들어가지 않은 값을 마저 넣어줌.
}
while (j <= right){ // 끝보다 작을 때, 계속 돌아감.
b[compare++] = a[j++]; // 아직 들어가지 않은 값을 마저 넣어줌.
}
for (int i = left; i <= right; i++)
a[i] = b[i]; // 전체 요소를 돌면서 바뀐 값을 a에도 적용시켜준다.
}
void merge_sort(int a[], int b[], int left, int right) { // 분할(작은 세트로 쪼갬) 및 병합
int mid; // 배열의 중간
if(left < right) {
// 0,1 2,3
mid = (left + right) / 2; // 중간 지점
merge_sort(a, b, left, mid); // 중간을 기준으로 왼쪽 분할
merge_sort(a, b, mid + 1, right); // 중간을 기준으로 오른쪽 분할
merge(a, b, left, right); // 왼쪽과 오른쪽을 정렬한 후 병합
}
}
반응형
'C언어 알고리즘' 카테고리의 다른 글
C언어의 완전탐색(exhaustive search) 알고리즘 (순열, 재귀함수) (0) | 2023.06.13 |
---|---|
C언어의 이진탐색(binary search) 알고리즘 (1) | 2023.05.10 |
C언어 포인터를 활용한 문자열 관련 함수(strcpy, strcat, strcmp, strncmp, strlen) 직접 구현하기 (4) | 2022.05.20 |
C언어 이중 for문과 배열을 이용한 달팽이 배열 알고리즘 (0) | 2022.05.20 |
C언어 연결리스트 구현(포인터에 대한 완벽 이해) (0) | 2022.04.20 |
Comments