Vivek Baliyan Ответов: 1

Почему код алгоритма слияния не работает.


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);


Что я уже пробовал:

У меня есть отладка кода, а также помощь с этого сайта : Программа для сортировки слиянием на языке Си-сумасшедший программист[^]

Richard MacCutchan

Может быть, вам стоит спросить сумасшедшего программиста?

Patrice T

"код не работает"не информативно.
Дайте подробности

1 Ответов

Рейтинг:
2

Patrice T

Этот код явно неправильный, потому что вы удалили части из кода сумасшедшего программиста. Проблема в том, что все имеет значение.

Сравните ваш код с оригиналом, и вы увидите, чего не хватает.

Цитата:
У меня есть отладка кода

Вы не знаете, как использовать отладчик, потому что в противном случае вы бы увидели проблему.
Отладчик-это инструмент, и вы должны научиться им пользоваться.

Похоже на домашнее задание, так что только намеки.