병합정렬에 대한 설명!!.
c언어
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include <stdio.h> int number = 8; int sorted[8]; //정렬 배열은 반드시 전역 변수로 선언 void merge(int a[], int m, int middle, int n){ int i = m; int j = middle+1; int k =m; // 작은 순서대로 배열에 삽입 //i는 middle까지 //j는 k까지 while(i<=middle && j<=n){ if(a[i]<=a[j]){ sorted[k] = a[i]; i++; }else{ sorted[k] = a[j]; j++; } k++; } // 남은 데이터도 삽입 if(i > middle){ for(int t=j;t<=n;t++){ //i가 먼저끝난거 sorted[k] = a[t]; k++; } } else { for(int t= i;t<=middle;t++){ //j가 먼저끝난ㄱ sorted[k] = a[t]; k++; } } //정렬된 배열을 삽입 for(int t = m; t<=n; t++){ a[t] = sorted[t]; } } //재귀함수로 구현하는 것이 가장 좋다. void mergeSort(int a[], int m, int n){ //크기가 1보다 큰 경우 if(m<n){ int middle =(m+n)/2; mergeSort(a,m,middle); mergeSort(a,middle+1,n); merge(a,m,middle,n); } } int main(void){ int array[number] = {7,6,5,8,3,5,9,2}; mergeSort(array, 0 , number-1); for(int i = 0; i<number; i++){ printf("%d ",array[i]); } } | cs |
java
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | package basic; public class MergeSort { static int number = 8; static int sorted[] = new int [8]; public static void merge(int a[],int m,int middle,int n){ int i = m; int j = middle+1; int k = m; //작은 순서대로 배열에 삽입 //i는 middle까지 //j는 k까지 while(i<=middle && j<=n) { if(a[i]<=a[j]) { sorted[k] = a[i]; i++; }else { sorted[k] = a[j]; j++; } k++; } //남은 데이터도 삽입 if(i > middle) { for(int t=j;t<=n;t++) { sorted[k] = a[t]; k++; } } else { for(int t=i;t<=middle;t++) { sorted[k] = a[t]; k++; } } //정렬된 배열을 삽입 for(int t = m; t<=n ; t++) { a[t] = sorted[t]; } } //재귀함수로 구현하는 것이 가장 좋다. static void mergeSort(int a[],int m,int n) { //크기가 1보다 큰 경우 if(m < n) { int middle = (m+n)/2; mergeSort(a,m,middle); mergeSort(a,middle+1,n); merge(a,m,middle,n); } else { int middle = (m+n)/2; merge(a,m,middle,n); } } public static void main(String[] args) { int array[] = {7,6,5,8,3,5,9,2}; mergeSort(array, 0 , number-1); for(int i = 0;i<number;i++) { System.out.print(array[i]+" "); } } } | cs |