Показать полную графическую версию : сортировка чисел
hi!
Скажите, как отсортировать числа в таком порядке:
1
2
3
4
5
6
7
8
9
10
sort() делает так:
1
10
2
3
4
5
6
7
8
9
Есть файл:
asd.txt
=====
2
4
5
1
6
10
3
9
8
7
<?
$file = file("asd.txt");
sort($file);
for ($i = 0; $i < count($file); $i ++){
echo $file[$i]."<BR>";
}
?>Так вот функция sort() сортирует его только так:
1
10
2
3
4
5
6
7
8
9
vadimiron
18-02-2006, 12:13
slaine
Там же есть ещё один параметер, попробуй поставить SORT_NUMERIC
vadimiron
18-02-2006, 12:18
и ещё можно попробывать natsort или usort
или в окнце в концов самому функцию написать: самые лучшие сортировки-это merge_sort и quick_sort
Я люблю больше merge_sort
vadimiron хе-хе..... сенкс!
А merge_sort и quick_sort я не нашёл на ru.php.net
natsort-ом я не поня, как пользоваться.
А, как интересно написать самому?, я вчера весь вечер сидел, но
такую муру зделала, аш противно.
Prisoner
18-02-2006, 12:45
Да-да, внимательно относимся к типам данных и тому, что php может творить с ними почти что угодно :). file возвращает массив строк, sort сортирует исходя из этого именно строки (без указания флагов уточнения сортировки) со всеми вытекающими последствиями.
Underson
18-02-2006, 13:13
А, как интересно написать самому?, я вчера весь вечер сидел, но
тут все просто открываешь учебник по алгебре и начулу анализа. и Математический анализ.. и штудируешь.. как только объём информации перерастет в качество.. можно будет почитать.. способы сортировки... или придумать свой...
для начала можно попробовать сортировку методом пузырьков.. по это не самый оптимальный алгоритм, сортировки, вот у нас девченка диплом по методам сортировки писала... с анализом скорости алгоритма, эффективности... и так далее... :)
<?
$file = file("asd.txt");
natsort($file);
for ($i = 0; $i < count($file); $i ++)
{
echo $file[$i]."<BR>";
}
echo '----------<br />';
foreach ($file as $v)
{
echo $v.'<br />';
}
?>
2 4 5 1 6 10 3 9 8 7
----------
1 2 3 4 5 6 7 8 9 10
Что за загадка?
Prisoner
18-02-2006, 19:51
Никакой загадки. natsort сохраняет ассоциации индексов. Поглядите функцией var_dump на $file до и после применения natsort. Ясный день, что первый цикл будет идти после сортировки по массиву непоследовательно.
До сортировки
print_r (array_slice ($file,0)) - Array ( [0] => 2 [1] => 4 [2] => 5 [3] => 1 [4] => 6 [5] => 10 [6] => 3 [7] => 9 [8] => 8 [9] => 7 )
var_dump ($file) = array(10) { [0]=> string(3) "2 " [1]=> string(3) "4 " [2]=> string(3) "5 " [3]=> string(3) "1 " [4]=> string(3) "6 " [5]=> string(4) "10 " [6]=> string(3) "3 " [7]=> string(3) "9 " [8]=> string(3) "8 " [9]=> string(1) "7" }
После сортировки
print_r (array_slice ($file,0)) - Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 )
var_dump ($file) = array(10) { [3]=> string(3) "1 " [0]=> string(3) "2 " [6]=> string(3) "3 " [1]=> string(3) "4 " [2]=> string(3) "5 " [4]=> string(3) "6 " [9]=> string(1) "7" [8]=> string(3) "8 " [7]=> string(3) "9 " [5]=> string(4) "10 " }
=====================================
Теперь понятно.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.