【发布时间】:2014-02-08 07:26:09
【问题描述】:
我正在尝试对包含国家列表及其运动员人数的数组进行递归快速排序
例如这个输入:
[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
问题是我丢失了键(国家),我只剩下每个键的值。
【问题讨论】:
-
您没有使用提供的排序功能之一的任何具体原因?
-
使用arsort()
-
我不能实现二进制排序
-
如果真的需要key,把
$pivot = array_shift($array);改成$pivotKey = key($array); $pivot = array_shift($array);,就可以得到$pivotKey中移位元素的key -
是的,我必须实现多项任务,例如二分搜索递归和其他任务的一部分