为什么合并算法代码不起作用。 [英] Why merge algorithm code is not working.
本文介绍了为什么合并算法代码不起作用。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
class MergeSort {
function divideElements($ arr,$ l,$ r,$ container){
if ($ l< $ r){
$ m =(int)(($ l + $ r)/ 2);
$ this-> divideElements($ arr,$ l,$ m,$ container);
$ this-> divideElements($ arr,($ m + 1),$ r,$ container);
$ this-> merge($ arr,$ l,$ m,($ m + 1),$ r,$ container);
}
return 0 ;
}
函数合并($ arr,$ l1,$ r1,$ l2,$ r2,$ container){
$我 = $ l1 ;
$ j = $ l2 ;
$ k = count($ container);
while ($ i< = $ r1 &&& span class =code-sdkkeyword> $ j < = $ r2){
if ($ arr [$ i]> $ arr [$ j]){
$ container [$ k ++] = $ arr [$ j ++];
} else {
$ container [$ k ++] = $ arr [$ i ++];
}
}
while ($ j< = $ r2)
$ container [$ k ++] = $ arr [$ j ++];
while ($ i< = $ r1)
$ container [$ k ++] = $ arr [$ i ++];
}
}
$ ms = 新 MergeSort();
$ arr = [12,11,13,5,6,7];
$ n = count($ arr) - 1 ;
$ container = array();
$ sortedA = $ ms-> divideElements($ arr,0,$ n,$ container);
我尝试过的事情:
我调试了代码,也接受了帮助来自这个网站:合并排序程序C - 疯狂程序员 [ ^ ]
解决方案
arr,
l,
R,
class MergeSort {
function divideElements($arr, $l, $r, $container) {
if ($l < $r) {
$m = (int) (($l + $r) / 2);
$this->divideElements($arr, $l, $m, $container);
$this->divideElements($arr, ($m + 1), $r, $container);
$this->merge($arr, $l, $m, ($m + 1), $r, $container);
}
return 0;
}
function merge ($arr, $l1, $r1, $l2, $r2, $container) {
$i = $l1;
$j = $l2;
$k = count($container);
while ($i <= $r1 && $j <= $r2) {
if ($arr[$i] > $arr[$j]) {
$container[$k++] = $arr[$j++];
} else {
$container[$k++] = $arr[$i++];
}
}
while ($j <= $r2)
$container[$k++] = $arr[$j++];
while ($i <= $r1)
$container[$k++] = $arr[$i++];
}
}
$ms = new MergeSort();
$arr = [12,11,13,5,6,7];
$n = count($arr) - 1;
$container = array();
$sortedA = $ms->divideElements($arr, 0, $n, $container);
What I have tried:
I have debug the code and also take help from this website : Program for Merge Sort in C - The Crazy Programmer[^]
解决方案
arr,
l,
r,
这篇关于为什么合并算法代码不起作用。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文