Skandalli
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Здравствуйте. Помогите пожалуйста. Пытаюсь реализовать быструю сортировку текста в массиве. Код: $arra = Array( "0" => Array( "name" => "error.txt", "size" => 200, "type" => "dfe", "mod" => 1392502979 ), "1" => Array( "name" => "gifs_03_yapfiles.ru.gif", "size" => 4282106, "type" => "abc", "mod" => 1394738534, ), "2" => Array ( "name" => "readme.txt", "size" => 1, "type" => "ytr", "mod" => 1391309100 ), "3" => Array ( "name" => "readme.txt", "size" => 1, "type" => "qqq", "mod" => 1391309100 ) ); | За образец взял этот код и написал код. Если Количество элементов в массиве 3 - все хорошо. Если их больше 3 (в данном случае 4) - тупо белый лист в браузере. Что я делаю не так? Может вообще подход не тот? Код: <?PHP $start = microtime(true); ini_set('memory_limit', '555M'); $arra = Array( "0" => Array( "name" => "error.txt", "size" => 200, "type" => "dfe", "mod" => 1392502979 ), "1" => Array( "name" => "gifs_03_yapfiles.ru.gif", "size" => 4282106, "type" => "abc", "mod" => 1394738534, ), "2" => Array ( "name" => "readme.txt", "size" => 1, "type" => "ytr", "mod" => 1391309100 ), "3" => Array ( "name" => "readme.txt", "size" => 1, "type" => "qqq", "mod" => 1391309100 ) ); function ascii($array, $i, $base, $att){ $cnt = min((strlen($array[$i][$att])), strlen($array[$base][$att])); $ord = ''; for($k = 0; $k < $cnt; $k++){ $int = ord($array[$i][$att][$k]); $ord .= $int; } return (int)$ord; } function quicksort (&$array, $att, $l=0, $r=0) { if($r === 0) $r = count($array)-1; $i = $l; $base = 1; $j = $r; do { while (ascii($array, $i, $base, $att) < ascii($array, $base,$base, $att)) $i++; while (ascii($array, $j, $base, $att) > ascii($array, $base, $base, $att)) $j--; if ($i <= $j) { if (ascii($array, $i, $base, $att) > ascii($array, $j, $base, $att)) list($array[$i], $array[$j]) = array($array[$j], $array[$i]); $i++; $j--; } }while ($i <= $j); if ($i < $r) quicksort ($array, $att, $i, $r); if ($j > $l) quicksort ($array, $att, $l, $j); } $a = "type"; $s = $arra; quicksort($s, $a); $d= $s; print_r($s); $time = microtime(true) - $start; printf('Скрипт выполнялся %.4F сек.', $time); ?> |
|