23:30

С++,PHP.

Здравствуйте , не совсем понимаю почему не работает следующий кусок кода
( на С этот алгоритм работает верно , на PHP почему-то нет) .
на С
на PHP
Заранее спасибо.

@темы: C++, PHP

Комментарии
01.07.2011 в 01:37

Пау-чок
Первое, что бросается в глаза:

если $i + $j - нечётное число, то $m будет float'ом, а вовсе не int'ом как в сях. И соответственно:
1) ($i != $m), ($j!=$m), ( $m != $left ), ( $m != $right ) в этом случае будет true для любых целочисленных $i, $m, $left и $right;
2) Во время рекурсии будет идти накопление ошибки в $m.

Попытайтесь заменить на

или

01.07.2011 в 01:57

Точно , всё дело было в этом , спасибо . Последний вопрос задам , если можно :
Реально самому написать сортировку на PHP , чтобы она быстрее работала , чем стандратные функции типа sort ?
А то я просто время засёк и сравнил , так оказалось что моя собcnвенная сортировка уступает стандартной , и это
при условии что,она вроде бы как работает за O(n*logn) ))
01.07.2011 в 04:10

Пау-чок
nvse Реально самому написать сортировку на PHP , чтобы она быстрее работала , чем стандратные функции типа sort ?
Я очень сильно сомневаюсь в этом. Как я понимаю, нативные функции php являются составной частью Zend Engine, написаны на C и исполняются процессором напрямую. Написанные же на php функции переводятся в байткод виртуальной машины Zend Engine II, который уже потом исполняется самой виртуальной машиной. А это значит, что каждый раз, например, встречая переменную, Zend Engine должен её найти в памяти, проверить её тип и при необходимости привести его к нужному, определить, допустима ли данная операция для данного типа и т.д. и т.п.
01.07.2011 в 09:04

nvse, php использует алгоритм qsort на уровне C. Если хочется поднять скорость - имеет смысл написать свое расширение для пыха на C, которое будет использовать более быстрый алгоритм.