Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- pytorch
- Visual Studio
- LIST
- Python
- pandas
- windows forms
- VS Code
- 컨테이너
- C
- error
- OpenCV
- C++
- Docker
- label
- Selenium
- YOLO
- mysql
- pip
- 프로그래머스
- 오류
- Linux
- paramiko
- ubuntu
- Numpy
- SSH
- C#
- 핑거스타일
- 채보
- 기타 연주
- JSON
Archives
- Today
- Total
기계는 거짓말하지 않는다
병합 정렬(Merge Sort) 본문
오름차순 Top-Down Merge Sort
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_SIZE 100
void merge(int arr[], int temparr[], int lo, int mid, int hi) {
int i, j, k;
for (k = lo; k <= hi; k++)
temparr[k] = arr[k];
i = lo; j = mid + 1;
for (int k = lo; k <= hi; k++) {
if (i > mid) arr[k] = temparr[j++]; // mid+1 ~ high 까지 남은 배열 복사 (left 파트 확인 끝)
else if (j > hi) arr[k] = temparr[i++]; // lo ~ mid 전 까지 남은 배열 복사 (right 파트 확인 끝)
else if (temparr[j] < temparr[i]) arr[k] = temparr[j++];
else arr[k] = temparr[i++];
}
}
void mergeSort(int arr[], int temparr[], int lo, int hi) {
if (hi <= lo) return;
int mid = (lo + hi) / 2;
mergeSort(arr, temparr, lo, mid);
mergeSort(arr, temparr, mid + 1, hi);
if (arr[mid] < arr[mid + 1]) return; // 이미 정렬되어 있으면 병합하지 않음
merge(arr, temparr, lo, mid, hi); // 병합
}
void printArray(int arr[]) {
int i;
for (i = 0; i < MAX_SIZE; i++) {
if (i != 0 && i % 10 == 0) puts("");
printf("%d ", arr[i]);
}
}
int main() {
int i;
int arr[MAX_SIZE], temparr[MAX_SIZE];
srand(time(NULL));
for (i = 0; i < MAX_SIZE; i++) {
arr[i] = rand() % 100;
}
mergeSort(arr, temparr, 0, MAX_SIZE-1);
printArray(arr);
}
'C' 카테고리의 다른 글
배열 최댓값, 최솟값 찾기 (분할 정복, Divide and Conquer) (0) | 2023.04.21 |
---|---|
C 파일 존재 여부, File Exist Check (0) | 2022.05.13 |
이진 검색 트리(Binary Search Tree) (0) | 2021.10.06 |
힙 정렬(Heap Sort) (0) | 2021.08.29 |
typedef 선언 (0) | 2021.05.27 |
Comments