【问题标题】:Quicksort and insertsort on an array in phpphp中数组的快速排序和插入排序
【发布时间】:2023-04-06 01:30:01
【问题描述】:
 <?php
$db=mysql_connect  ("localhost", "root",  "") or die ('I cannot connect to the database  because: ' . mysql_error());
//-select  the database to use
$mydb=mysql_select_db("address");

$aArray = array();
$sSQL = sprintf("SELECT * FROM address1",
mysql_real_escape_string($ir['fname'])
);
$rResult = mysql_query($sSQL);
while ($aRow = mysql_fetch_assoc($rResult))
{
$aArray[] = $aRow;
}
//print_r($aArray);
 echo"<br>";
  echo"<br>";
  echo"<br>";


$unsorted = $aArray;

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

    $pivot = $array[0];
    $left = $right = array();

    for ($i = 1; $i < count($array); $i++) {
        if ($array[$i] < $pivot)
            $left[] = $array[$i];
        else
            $right[] = $array[$i];
    }

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

$sorted = quicksort($unsorted);

print_r($sorted);
?> 

我正在尝试从 MySQL 数据库(2500 行数据)中提取一些数据,然后将该数据存储到一个数组中,然后对该数组进行快速排序。我不知道我的方法是否错误,因此将不胜感激。到目前为止,我一直收到错误消息:

致命错误:达到“100”的最大函数嵌套级别,正在中止!在第 25 行的 C:\wamp\www\koolbi\heapsearch.php 中

【问题讨论】:

  • 为什么不在 SQL 查询期间对数据进行排序?
  • 确实,您应该更喜欢用 SQL 对数据进行排序,这样会更容易更快。
  • 既然 PHP 内置了快速排序,为什么还要编写所有逻辑呢?
  • @MarkBaker 它的讲座命令。它是一门名为分析算法的课程,因此内置函数无法满足要求。但是我如何访问内置函数?
  • 任何内置数组排序函数都使用快速排序作为其核心算法......你说内置函数无法处理要求,甚至 array_multisort() 或 usort() ?您似乎没有做任何内置排序无法处理的特别聪明的事情

标签: php mysql


【解决方案1】:

我会将 cmets 总结为一个答案,以供将来参考。最好的解决方案是在 MySQL 查询中对结果进行排序;在这种情况下SELECT * FROM address1 ORDER BY [your field] ASC|DESC;其中 ASC|DESC 将选择订单。有关 MySQL 排序的更多信息,请查看thisMySQL docs

同样,正如 Mark Ba​​ker 所说,如果您需要在 PHP 中执行此操作,请使用内置函数。大多数语言的内置函数在它们所做的事情上都会非常高效(事实上我相信大多数 PHP 都是用 C 原生编写的),这使得它们比你自己编写的任何东西都快得多。

当然,如果这是你需要实现快速排序算法的学校作业,你可能应该查看this community maintained explanation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2019-06-30
    • 2013-02-25
    • 1970-01-01
    • 2020-07-30
    • 2011-05-12
    相关资源
    最近更新 更多