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

(새 문서: ==개요== ;C# 병합정렬 구현 <source lang='csharp'> using System; class Program { static void merge_sort(int[] a) { merge_sort(a,0,a.Length-1); } static voi...)
 
30번째 줄: 30번째 줄:
         int[] arr = {9,1,22,4,0,-1,1,22,100,10};
         int[] arr = {9,1,22,4,0,-1,1,22,100,10};
         merge_sort(arr);
         merge_sort(arr);
         foreach(int i in arr) Console.Write(i+" ");
         Console.Write(string.Join(",",arr));
         // -1 0 1 1 4 9 10 22 22 100  
         // -1,0,1,1,4,9,10,22,22,100
     }
     }
}
}

2018년 8월 28일 (화) 20:37 판

1 개요

C# 병합정렬 구현
using System;
class Program {
    static void merge_sort(int[] a) {
        merge_sort(a,0,a.Length-1);
    }
    static void merge_sort(int[] a, int left, int right) {
        if( left>=right ) return;
        int middle = (left+right-1)/2;
        merge_sort(a, left, middle);
        merge_sort(a, middle+1, right);
        int n1 = middle + 1 - left;
        int n2 = right - middle;
        int[] L=new int[n1], R=new int[n2];
        int i, j, k;
        for(i=0; i<n1; i++) L[i]=a[left+i];
        for(i=0; i<n2; i++) R[i]=a[middle+1+i];
        i=j=0; k=left;
        while( i<n1 && j<n2 ) {
            if( L[i]<=R[j] ) { a[k]=L[i]; i++; k++; }
            else { a[k]=R[j]; j++; k++; }
        }
        while( i<n1 ) { a[k]=L[i]; i++; k++; }
        while( j<n2 ) { a[k]=R[j]; j++; k++; }
    }
    static void Main() {
        int[] arr = {9,1,22,4,0,-1,1,22,100,10};
        merge_sort(arr);
        Console.Write(string.Join(",",arr));
        // -1,0,1,1,4,9,10,22,22,100
    }
}

2 같이 보기

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