[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Быстрая сортировка
kilogram
<?php 
$mas = array(5,3,-1,4,2,-300,6,-500,-100);
function sos($a1,$a2)
{
return $a2 - $a1;
}
function dobavka(&$mas, $func){
sortirovka($mas, 0, count($mas)-1, $func);
}

function sortirovka(&$mas,$min,$max,$func){
$i = $min;
$j = $max;
$x = $mas[($min+$max)/2];

do{
while($func($mas[$i], $x)<0) ++$i;
while($func($mas[$j], $x)>0) --$j;
if($i<=$j){
$element = $mas[$i];
$mas[$i] = $mas[$j];
$mas[$j] = $element;
$i++; $j--;
}
}
while($i<=$j);

if($min<$j) sortirovka($mas,$min,$j, $func); //начало с серединой
if($i<$max) sortirovka($mas,$i,$max, $func); // середина с концом
}

dobavka($mas, 'sos');
foreach($mas as $rez)
echo $rez.' '.' ';

?>


Смущает, как в переменную $func можно добавить круглые скобки и записать выражение?
while($func($mas[$i], $x)<0) ++$i;
while($func($mas[$j], $x)>0) --$j;

Что это означает? С функцией понимаю ,а вот с переменной, как она со скобками и внутри выражение?




Спустя 23 минуты, 34 секунды (28.04.2012 - 13:32) Игорь_Vasinsky написал(а):
смысл то какой?

Спустя 3 часа, 25 минут, 15 секунд (28.04.2012 - 16:57) Nord написал(а):
В большинстве языков такая вещь называется указателем на функцию.

В данном случае в переменную $func записывается имя функции, которая вызывается при сравнении чисел (function sos). Очень удобно, если нужно изменять логику сортировки: например, в массиве не числа, а объекты, которые нужно отсортировать по какому-либо полю.

Начиная с какой-то версии PHP, таким образом можно вызывать лямбда-функции


$func = function ($a) { echo $a; };
$func("Echo");
// Echo

Спустя 2 часа, 59 минут, 25 секунд (28.04.2012 - 19:57) kilogram написал(а):
Попробовал написать такой код, который вычисляет квдадрат числа.


function santa($n)
{
return $n*$n;
}

function balta($n)
{
return $n(5);
}

echo balta("santa");
echo '<br />';

Как-то странно так получилось, ради интереса написал santa в параметре функции и ошибок не выдало.
Это что, получается я передал всю функцию санта в функции балта?
В пхп разве если при вызове писать что-то в кавычках и оно совпадет с названием функции ранее где-то описаной в коде выше то передастся не строка ,а сама функция в качестве аргумента?

Спустя 14 минут, 5 секунд (28.04.2012 - 20:11) sergeiss написал(а):
Цитата (kilogram @ 28.04.2012 - 21:57)
В пхп разве если при вызове писать что-то в кавычках и оно совпадет с названием функции ранее где-то описаной в коде выше то передастся не строка ,а сама функция в качестве аргумента?

Извини, но это "бред сивой кобылы" :)

При чем тут "при вызове писать что-то в кавычках...."? Ты указал $n(5), то есть ты "сказал", что тебе надо вызвать функцию, имя которой находится в переменной $n, и передать ей в качестве аргумента число 5. Вот ты и получил то, что запросил. Всё по-честному.

PS. Ты можешь просто написать в основном скрипте
$f='santa';
echo $f(6);


И получишь вполне ожидаемый результат.

Спустя 28 минут, 18 секунд (28.04.2012 - 20:39) kilogram написал(а):
Да, я передал строку, а затем получилось после круглых скобок я так понял, что в глобальной памяти нашло название этой функции и сверило со строкой которую я передал?

Спустя 11 минут, 38 секунд (28.04.2012 - 20:51) sergeiss написал(а):
kilogram - прочитай тут: http://www.php.net/manual/ru/functions.var...e-functions.php

И вообще рекомендую скачать с того сайта хэлп http://www.php.net/download-docs.php, лучше в формате CHM и изучать его почаще

Спустя 2 часа, 42 секунды (28.04.2012 - 22:52) kilogram написал(а):
Я так понял интерпретатор языка ПХП когда видит название переменной, а за ней скобки, подставляет значение этой переменной в название этой переменной со скобками,если значение этой переменной совпало с названием такой функции описаной где-то в коде.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.