【问题标题】:Quicksort getting rid of Keys after sorting排序后快速排序摆脱键
【发布时间】: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
  • 是的,我必须实现多项任务,例如二分搜索递归和其他任务的一部分

标签: php sorting quicksort


【解决方案1】:

您应该在函数的最后一行(以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));
}

【讨论】:

    【解决方案2】:

    试用内置的数组排序功能。 arsort() 应该可以解决问题。

    http://www.php.net/manual/en/array.sorting.php

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 2016-12-23
      • 2015-04-27
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多