ABOUT ME

네트워크 개발자

Today
Yesterday
Total
  • (c언어)병합정렬
    개발공부/알고리즘공부 2023. 12. 20. 23:32

    리스트가 있을때 

    2개씩 계속 쪼개고

    2개씩 맞추어가며 정렬

    또 2개씩 

    마지막에 다합함

    nlogn의 복잡도를 가짐

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #define size 1000000
    
    int sorted[size];
    
    int merge(int list[],int left,int mid,int right ) {
    	int i, j, k, l;
    	i = left;
    	j = mid + 1;
    	k = left;
    	while (i<=mid && j<=right) {
    		if (list[i] <= list[j]) {
    			sorted[k++] = list[i++];
    		}
    		else {
    			sorted[k++] = list[j++];
    		}
    	
    	}
    	if (i > mid) {
    		for (l = j; l<=right; l++) {
    			sorted[k++] = list[l];
    			
    		}
    	}
    	else {
    		for (l = i; l <= mid; l++) {
    			sorted[k++] = list[l];
    			
    		}
    	}
    	for (l = left; l <= right; l++) {
    		list[l] = sorted[l];
    	}
    	return 0;
    }
    
    int merge_sort(int list[],int left, int right) {
    
    	int mid;
    	if (left < right) {
    		mid = (left + right) / 2;
    		merge_sort(list, left, mid);
    		merge_sort(list, mid + 1, right);
    		merge(list, left, mid, right);
    	}
    	return 0;
    }
    int main(void) {
    	int list[size];
    	int a;
    	scanf("%d", &a);
    
    	for (int i = 0; i < a; i++) {
    		scanf("%d", &list[i]);
    	}
    	merge_sort(list, 0, a-1);
    	for (int i = 0; i < a; i++) {
    		printf("%d\n", list[i]);
    	}
    	return 0;
    }

     

Designed by Tistory.