2014-01-19 3 views
0

Я пытаюсь запустить рекурсивную быструю сортировку на массив со списком стран и их количество спортсменовQuicksort избавлении от ключей после сортировки

Например этот вход:

[Iran, Islamic Republic Of] => 38 
[Italy] => 257 
[Brazil] => 246 
[Norway] => 114 
[Algeria] => 17 
[Bulgaria] => 65 
[Malaysia] => 29 

Я пытаясь отсортировать информацию от высшего к низшему, используя эту функцию:

function quicksort($array) 
{ 
    if (count($array) == 0) { 
     return array(); 
    } 

    $pivot = array_shift($array); //Array_shift is getting rid of keys I need the keys to identify the numbers 
    $left = $right = array(); 

    foreach($array as $key => $object){ 
     if ($object > $pivot) { 
      $left[$key] = $object; 
     } else { 
      $right[$key] = $object; 
     } 
    } 

    return array_merge(quicksort($left), array($pivot), quicksort($right)); 
} 

выход есть:

[2] => 520 
[3] => 512 
[4] => 482 
[5] => 448 
[6] => 417 
[7] => 378 
[8] => 357 

Проблема в том, что я теряю ключи (страны), и у меня остались только значения каждой клавиши.

+0

По какой-либо конкретной причине вы не используете одну из предоставленных функций сортировки? – Mario

+1

Использовать [arsort()] (http://www.php.net/manual/en/function.arsort.php) –

+0

Не могу ли я реализовать двоичную сортировку – user3211106

ответ

0

Вы должны установить ключ поворота в последней строке функции (строка, начинающаяся с return). Это должно работать:

function quicksort($array) 
{ 
    if (count($array) == 0) { 
     return array(); 
    } 

    reset($array); // Reset array pointer to the first element 
    $pivotkey = key($array); // Get the key of that first element 
    $pivot = array_shift($array); // Het it's value and remove it 

    $left = $right = array(); 

    foreach ($array as $key => $value) { 
     if ($value > $pivot) { 
      $left[$key] = $value; 
     } else { 
      $right[$key] = $value; 
     } 
    } 

    return array_merge(quicksort($left), array($pivotkey => $pivot), quicksort($right)); 
} 
+0

Спасибо, что он отлично работает – user3211106

Смежные вопросы