Задать вопрос
StaDi
@StaDi
Курьер в it отделе

Найти ошибку в алгоритме сортировки?

Всем привет! Подскажите где я не прав.
Я решил отсортировать массив по возрастанию. Без использования функции.

$a = array(2,7,200,6);
$b = $a;

for($i=0; $i < count($a); ++$i)
{
    $save_j = $i;

    for($j = $i; $j < count($a); ++$j)
    {
        if ($a[$i] < $a[$j])
        {
            $a[$i] = $a[$j];
            $save_j = $j;
        }
    }

    $a[$save_j] = $b[$i];

}


Но на выходе получаю
array (size=4)
0 => int 200
1 => int 7
2 => int 6
3 => int 6


А этот вариант верный
$a = array(2,200,7,300,4,44,5,102);

for($i=0; $i < count($a); ++$i)
{
    $save_j = $i;
    $save_max = $a[$i];

    for($j = $i; $j < count($a); ++$j)
    {
        if ($save_max < $a[$j])
        {
            $save_max = $a[$j];
            $save_j = $j;
        }
    }

    $a[$save_j] = $a[$i];
    $a[$i] = $save_max;
}


array (size=8)
0 => int 300
1 => int 200
2 => int 102
3 => int 44
4 => int 7
5 => int 5
6 => int 4
7 => int 2


По мне они одинаковые, да и логика вроде верная.
Но где-то я ошибся, а где понять не могу.
  • Вопрос задан
  • 2257 просмотров
Подписаться 2 Оценить Комментировать
Решение пользователя Rsa97 К ответам на вопрос (3)
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Странно, а в каком месте стоял var_dump? Вообще-то, в конце работы вашего алгоритма получаем
array(4) { [0]=> int(200) [1]=> int(7) [2]=> int(6) [3]=> int(6) }

То есть сортировка работает, только по убыванию.
Ответ написан