0
 <?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' に達しました。中止します! C:\wamp\www\koolbi\heapsearch.php の 25 行目

4

1 に答える 1

1

今後の参考のために、コメントを回答に要約します。ここでの最善の解決策は、MySQL クエリで結果を並べ替えることです。この場合SELECT * FROM address1 ORDER BY [your field] ASC|DESC; ここで、ASC|DESC は順序を選択します。MySQL の注文の詳細については、この、またはMySQL のドキュメントを参照してください。

また、Mark Ba​​ker が述べたように、PHP で行う必要がある場合は、組み込み関数を使用してください。ほとんどの言語の組み込み関数は、その機能が非常に効率的であり (実際、ほとんどの PHP は C でネイティブに記述されていると思います)、自分で記述できるものよりもはるかに高速になります。

もちろん、これがクイックソート アルゴリズムを実装する必要がある学校の課題である場合は、おそらくこのコミュニティが管理する説明を確認する必要があります。

于 2013-03-06T01:23:56.383 に答える