편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
3번째 줄: | 3번째 줄: | ||
[[분류: C]] | [[분류: C]] | ||
{{참고|C 병합정렬 구현}} | {{참고|C 병합정렬 구현}} | ||
< | <source lang='c'> | ||
#include <stdio.h> | #include <stdio.h> | ||
void merge_sort(int a[], int left, int right) { | void merge_sort(int a[], int left, int right) { | ||
30번째 줄: | 30번째 줄: | ||
// -1 0 1 1 4 9 22 22 100 100 | // -1 0 1 1 4 9 22 22 100 100 | ||
} | } | ||
</ | </source> | ||
==C++== | ==C++== | ||
[[분류: C++]] | [[분류: C++]] | ||
{{참고|C++ 병합정렬 구현}} | {{참고|C++ 병합정렬 구현}} | ||
< | <source lang='cpp'> | ||
#include <iostream> | #include <iostream> | ||
void merge_sort(int a[], int left, int right) { | void merge_sort(int a[], int left, int right) { | ||
62번째 줄: | 62번째 줄: | ||
// -1 0 1 1 4 9 10 22 22 100 | // -1 0 1 1 4 9 10 22 22 100 | ||
} | } | ||
</ | </source> | ||
==C#== | ==C#== | ||
[[분류: csharp]] | [[분류: csharp]] | ||
{{참고|C샵 병합정렬 구현}} | {{참고|C샵 병합정렬 구현}} | ||
< | <source lang='csharp'> | ||
using System; | using System; | ||
class Program { | class Program { | ||
95번째 줄: | 95번째 줄: | ||
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); | ||
Console.Write( | foreach(int i in arr) Console.Write(i+" "); | ||
// -1 | // -1 0 1 1 4 9 10 22 22 100 | ||
} | } | ||
} | } | ||
</ | </source> | ||
==Java== | ==Java== | ||
[[분류: Java]] | [[분류: Java]] | ||
{{참고|Java 병합정렬 구현}} | {{참고|Java 병합정렬 구현}} | ||
< | <source lang='Java'> | ||
public class MyClass { | public class MyClass { | ||
static void merge(int[] arr, int left, int middle, int right) { | static void merge(int[] arr, int left, int middle, int right) { | ||
137번째 줄: | 137번째 줄: | ||
} | } | ||
} | } | ||
</ | </source> | ||
==Perl== | ==Perl== | ||
[[분류:Perl]] | [[분류:Perl]] | ||
{{ | {{Perl 병합정렬 구현}} | ||
< | <source lang='perl'> | ||
sub merge_sort { | sub merge_sort { | ||
my | my @a = @_; | ||
return @a if @a < 2; | |||
my $k = int @a / 2; | |||
$ | my @n1 = merge_sort(@a[0 .. $k - 1]); | ||
my @ | my @n2 = merge_sort(@a[$k .. $#a]); | ||
my @ | for $i (@a) { | ||
$i = !@n2 ? shift @n1 | |||
: !@n1 ? shift @n2 | |||
for $i (@ | : $n2[0] >= $n1[0] ? shift @n1 | ||
$i = !@ | : shift @n2; | ||
} | } | ||
return @a; | |||
} | } | ||
@ | |||
my @a = (9,1,22,4,0,-1,1,22,100,10); | |||
printf("%s\n", join ',', merge_sort(@a)); | |||
# -1,0,1,1,4,9,10,22,22,100 | #-1,0,1,1,4,9,10,22,22,100 | ||
</ | </source> | ||
==PHP== | ==PHP== | ||
[[분류: PHP]] | [[분류: PHP]] | ||
{{참고|PHP 병합정렬 구현}} | {{참고|PHP 병합정렬 구현}} | ||
< | <source lang='php'> | ||
<?php | <?php | ||
function merge_sort(&$a) { | function merge_sort(&$a, $left=0, $right=null) { | ||
$ | if( is_null($right) ) $right=count($a)-1; | ||
if( $ | if( $left>=$right ) return; | ||
$ | $middle = intdiv($left+$right-1, 2); | ||
merge_sort($a, $left, $middle); | |||
merge_sort($a, $middle+1, $right); | |||
$n1 = $middle + 1 - $left; | |||
$n2 = $right - $middle; | |||
$L = array_fill(0, $n1, 0); | |||
$R = array_fill(0, $n2, 0); | |||
if | for($i=0; $i<$n1; $i++) $L[$i] = $a[$left+$i]; | ||
$ | for($i=0; $i<$n2; $i++) $R[$i] = $a[$middle+1+$i]; | ||
$k = $left; | |||
$i = $j = 0; | |||
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++; } | |||
} | } | ||
$arr = [9,1,22,4,0,-1,1,22,100,10]; | $arr = [9,1,22,4,0,-1,1,22,100,10]; | ||
186번째 줄: | 193번째 줄: | ||
echo implode(',',$arr); | echo implode(',',$arr); | ||
# -1,0,1,1,4,9,10,22,22,100 | # -1,0,1,1,4,9,10,22,22,100 | ||
</ | </source> | ||
==Python== | ==Python== | ||
[[분류: Python]] | [[분류: Python]] | ||
{{참고|Python 병합정렬 구현}} | {{참고|Python 병합정렬 구현}} | ||
< | <source lang='Python'> | ||
def merge_sort(a, left=0, right=-1): | def merge_sort(a, left=0, right=-1): | ||
def merge(a, left, middle, right): | def merge(a, left, middle, right): | ||
217번째 줄: | 224번째 줄: | ||
print( arr ) | print( arr ) | ||
# [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> | ||
==Ruby== | ==Ruby== | ||
[[분류: Ruby]] | [[분류: Ruby]] | ||
{{참고|Ruby 병합정렬 구현}} | {{참고|Ruby 병합정렬 구현}} | ||
< | <source lang='ruby'> | ||
def merge_sort(a, left=0, right=-1) | def merge_sort(a, left=0, right=-1) | ||
def merge(a, left, middle, right) | def merge(a, left, middle, right) | ||
250번째 줄: | 257번째 줄: | ||
print arr | print arr | ||
# [-1, 0, 1, 1, 4, 9, 10, 22, 22, 100] | # [-1, 0, 1, 1, 4, 9, 10, 22, 22, 100] | ||
</ | </source> | ||
==같이 보기== | ==같이 보기== | ||
258번째 줄: | 265번째 줄: | ||
==참고== | ==참고== | ||
* https://www.geeksforgeeks.org/merge-sort/ | * https://www.geeksforgeeks.org/merge-sort/ | ||