熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

php關聯數組排序(快速排序)

2013-11-15 12:21:57  來源: PHP編程 

  使用環境和條件

  有這樣一種情況php裡面的關聯數組如果下面這樣的數組數據

  [php]

  $array = array (

  array (

  name => xiao

  age =>

  )

  array (

  name => wang

  age =>

  )

  array (

  name => chen

  age =>

  )

  )

  我們要對數組針對age字段進行排序php自帶的函數無論是那種sort顯然都不能滿足我們的需求因此我們可以自己寫一個快速排序代碼很快的實現我們的要求

  注意情況

  php裡面是沒有指針存在的所以當想要引用傳遞的時候我們不能跟C代碼一樣直接這樣寫quicksort(int *A int begin int end)而是要使用php的&運算符將數組的地址傳遞跟快速排序函數這樣就能在php裡實現引用傳遞而不是值傳遞

  快速排序代碼

  [php]

  QuickSortProcess ( $array count ( $array )

  print_r ( $array )

  /**

  * Description:快速排序中獲取中樞點的位置

  */

  function QuickPartition(&$array $left $right) {

  // 基准定義

  $stand = $array [$left];

  // 從區間兩端向中間掃描直到$left == $right為止

  while ( $left < $right ) {

  while ( $left < $right && $array [$right] [age] >= $stand [age] ) {

  $right ;

  }

  if ($left < $right) {

  $array [$left ++] = $array [$right];

  }

  while ( $left < $right && $array [$left] [age] <= $stand [age] ) {

  $left ++;

  }

  if ($left < $right) {

  $array [$right ] = $array [$left];

  }

  }

  // 獲取中樞點位置

  $array [$left] = $stand;

  return $left;

  }

  /**

  * Description:快速排序主流程函數

  */

  function QuickSortProcess(&$array $begin $end) {

  // 變量定義

  $pivot = NULL; // 中樞點

  if ($begin < $end) {

  $pivot = QuickPartition ( $array $begin $end )

  QuickSortProcess ( $array $begin $pivot

  QuickSortProcess ( $array $pivot + $end )

  }

  }

  我在項目上就用到了這個快速排序挺開心的不枉這個假期花了N天AC快速排序的c代碼


From:http://tw.wingwit.com/Article/program/PHP/201311/20808.html
  • 上一篇文章:

  • 下一篇文章:
  • Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.