首頁 > 後端開發 > PHP問題 > PHP演算法怎麼求數組中第K大的值

PHP演算法怎麼求數組中第K大的值

PHPz
發布: 2023-04-23 09:35:31
原創
427 人瀏覽過

在PHP的開發中,經常需要對陣列進行排序、查找等操作。而解一個陣列中第K大的值也是一個常見的問題。本文將介紹幾種PHP演算法實現求解數組中第K大的值的方法。

一、冒泡排序法

冒泡排序法是一種簡單又易懂的排序演算法,其基本思想是比較相鄰的元素,如果前面的元素大於後面的元素,就交換它們的位置。此方法的時間複雜度為O(n^2)。

實作程式碼如下:

function bubbleSort($arr) {
  $len = count($arr);
  for ($i=0; $i<$len-1; $i++) {
    for ($j=0; $j<$len-$i-1; $j++) {
      if ($arr[$j] > $arr[$j+1]) {
        $temp = $arr[$j];
        $arr[$j] = $arr[$j+1];
        $arr[$j+1] = $temp;
      }
    }
  }
  return $arr;
}

function findKthLargest($nums, $k) {
  $nums = bubbleSort($nums);
  $len = count($nums);
  return $nums[$len-$k];
}
登入後複製

二、快速排序法

快速排序法是一種高效率的排序演算法,其基本想法是從數列中選擇一個基準元素,將小於基準元素的放置於左邊,大於基準元素的放置於右邊,再遞歸地對左右區間進行排序。此方法的時間複雜度為O(nlogn)。

實作程式碼如下:

function quickSort($arr) {
  $len = count($arr);
  if ($len <= 1) {
    return $arr;
  }
  $pivot = $arr[0];
  $left = [];
  $right = [];
  for ($i=1; $i<$len; $i++) {
    if ($arr[$i] < $pivot) {
      $left[] = $arr[$i];
    } else {
      $right[] = $arr[$i];
    }
  }
  return array_merge(quickSort($left), [$pivot], quickSort($right));
}

function findKthLargest($nums, $k) {
  $nums = quickSort($nums);
  $len = count($nums);
  return $nums[$len-$k];
}
登入後複製

三、堆排序法

堆排序法是一種基於堆結構的排序演算法,其基本思想是將無序序列建構成一個堆,並依序取出堆頂的最大值,再將剩餘的無序序列重新建構成一個堆,依此類推,直到有序。此方法的時間複雜度為O(nlogn)。

實作程式碼如下:

function heapSort($arr) {
  $len = count($arr);
  for ($i=floor($len/2)-1; $i>=0; $i--) {
    adjustHeap($arr, $i, $len);
  }
  for ($j=$len-1; $j>0; $j--) {
    swap($arr, 0, $j);
    adjustHeap($arr, 0, $j);
  }
  return $arr;
}

function adjustHeap(&$arr, $i, $len) {
  $temp = $arr[$i];
  for ($k=$i*2+1; $k<$len; $k=$k*2+1) {
    if ($k+1 < $len && $arr[$k] < $arr[$k+1]) {
      $k++;
    }
    if ($arr[$k] > $temp) {
      $arr[$i] = $arr[$k];
      $i = $k;
    } else {
      break;
    }
  }
  $arr[$i] = $temp;
}

function swap(&$arr, $i, $j) {
  $temp = $arr[$i];
  $arr[$i] = $arr[$j];
  $arr[$j] = $temp;
}

function findKthLargest($nums, $k) {
  $nums = heapSort($nums);
  $len = count($nums);
  return $nums[$len-$k];
}
登入後複製

以上就是三種常見的PHP演算法實作求解陣列中第K大的值的方法。在實際應用中,我們需要根據實際情況選擇合適的演算法以確保效率。

以上是PHP演算法怎麼求數組中第K大的值的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板