"병합정렬 구현"의 두 판 사이의 차이

5번째 줄: 5번째 줄:
<source lang='c'>
<source lang='c'>
#include <stdio.h>
#include <stdio.h>
void merge_sort(int arr[], int size, int low, int high) {
void merge(int arr[], int left, int middle, int right) {
if(low >= high) return;
     int temp[right-1], i, j, k;
int mid = (low+high)/2;
for(i=left, j=left, k=middle+1; j<=middle && k<=right; i++) {
merge_sort(arr, size, low, mid);
if(arr[j]<=arr[k]) temp[i]=arr[j++];
merge_sort(arr, size, mid+1, high);
else temp[i]=arr[k++];
//merge
     int temp[size-1], l1, l2, i;
for(l1=low, l2=mid+1, i=low; l1<=mid && l2<=high; i++) {
if(arr[l1]<=arr[l2]) temp[i]=arr[l1++];
else temp[i]=arr[l2++];
}
}
while(l1 <= mid) temp[i++]=arr[l1++];
while(j <= middle) temp[i++]=arr[j++];
while(l2 <= high) temp[i++]=arr[l2++];
while(k <= right) temp[i++]=arr[k++];
for(i=low; i<=high; i++) arr[i]=temp[i];
for(i=left; i<=right; i++) arr[i]=temp[i];
}
void merge_sort(int arr[], int left, int right) {
if(left >= right) return;
int middle = (left+right)/2;
merge_sort(arr, left, middle);
merge_sort(arr, middle+1, right);
merge(arr, left, middle, right);
}
}
int main() {
int main() {
     int arr[] = {3,4,2,1,7,5,8,9,0,6,100,10};
     int arr[] = {3,4,2,1,7,5,8,9,0,6,100,10};
     int size = sizeof(arr)/sizeof(int);
     int size = sizeof(arr)/sizeof(int);
merge_sort(arr, size, 0, size-1);
merge_sort(arr, 0, size-1);
for(int i=0; i<size; i++) printf("%d ", arr[i]);
for(int i=0; i<size; i++) printf("%d ", arr[i]);
// 0 1 2 3 4 5 6 7 8 9 10 100  
// 0 1 2 3 4 5 6 7 8 9 10 100
}
}
</source>
</source>

2018년 7월 15일 (일) 18:35 판

1 C

#include <stdio.h>
void merge(int arr[], int left, int middle, int right) {
    int temp[right-1], i, j, k;
	for(i=left, j=left, k=middle+1; j<=middle && k<=right; i++) {
		if(arr[j]<=arr[k]) temp[i]=arr[j++];
		else temp[i]=arr[k++];
	}
	while(j <= middle) temp[i++]=arr[j++];
	while(k <= right) temp[i++]=arr[k++];
	for(i=left; i<=right; i++) arr[i]=temp[i]; 
}
void merge_sort(int arr[], int left, int right) {
	if(left >= right) return;
	int middle = (left+right)/2;
	merge_sort(arr, left, middle);
	merge_sort(arr, middle+1, right);
	merge(arr, left, middle, right);
}
int main() {
    int arr[] = {3,4,2,1,7,5,8,9,0,6,100,10};
    int size = sizeof(arr)/sizeof(int);
	merge_sort(arr, 0, size-1);
	for(int i=0; i<size; i++) printf("%d ", arr[i]);
	// 0 1 2 3 4 5 6 7 8 9 10 100
}

2 같이 보기

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}