Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   сортировка чисел (http://forum.oszone.net/showthread.php?t=61405)

slaine 18-02-2006 10:58 407929

сортировка чисел
 
hi!
Скажите, как отсортировать числа в таком порядке:
Код:

1
2
3
4
5
6
7
8
9
10

sort() делает так:

Код:

1
10
2
3
4
5
6
7
8
9


Igor_I 18-02-2006 11:14 407932

Цитата:

sort() делает так:
PHP?

slaine 18-02-2006 11:26 407934

Igor_I что PHP?

Igor_I 18-02-2006 11:40 407938

А где sort()?

slaine 18-02-2006 11:58 407942

Есть файл:
Код:

asd.txt
=====
2
4
5
1
6
10
3
9
8
7

PHP код:

<?
$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 407947

slaine
Там же есть ещё один параметер, попробуй поставить SORT_NUMERIC

vadimiron 18-02-2006 12:18 407954

и ещё можно попробывать natsort или usort

или в окнце в концов самому функцию написать: самые лучшие сортировки-это merge_sort и quick_sort
Я люблю больше merge_sort

slaine 18-02-2006 12:32 407957

vadimiron хе-хе..... сенкс!

А merge_sort и quick_sort я не нашёл на ru.php.net
natsort-ом я не поня, как пользоваться.
А, как интересно написать самому?, я вчера весь вечер сидел, но
такую муру зделала, аш противно.

Prisoner 18-02-2006 12:45 407964

Да-да, внимательно относимся к типам данных и тому, что php может творить с ними почти что угодно :). file возвращает массив строк, sort сортирует исходя из этого именно строки (без указания флагов уточнения сортировки) со всеми вытекающими последствиями.

Underson 18-02-2006 13:13 407968

Цитата:

А, как интересно написать самому?, я вчера весь вечер сидел, но
тут все просто открываешь учебник по алгебре и начулу анализа. и Математический анализ.. и штудируешь.. как только объём информации перерастет в качество.. можно будет почитать.. способы сортировки... или придумать свой...
для начала можно попробовать сортировку методом пузырьков.. по это не самый оптимальный алгоритм, сортировки, вот у нас девченка диплом по методам сортировки писала... с анализом скорости алгоритма, эффективности... и так далее... :)

Igor_I 18-02-2006 13:54 407979

PHP код:

<?  
$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 408092

Никакой загадки. natsort сохраняет ассоциации индексов. Поглядите функцией var_dump на $file до и после применения natsort. Ясный день, что первый цикл будет идти после сортировки по массиву непоследовательно.

Igor_I 18-02-2006 20:17 408094

До сортировки
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 " }
=====================================
Теперь понятно.


Время: 06:20.

Время: 06:20.
© OSzone.net 2001-