1. 程式人生 > >常見查詢和排序演算法(PHP實現)

常見查詢和排序演算法(PHP實現)

下面分享一些最常見的演算法,用PHP如何實現。

1、氣泡排序

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

2、歸併排序

function Merge(&$arr, $left, $mid, $right) {
  $i = $left;
  $j = $mid + 1;
  $k = 0;
  $temp = array();
  while ($i <= $mid && $j <= $right)
  {
    if ($arr[$i] <= $arr[$j])
      $temp[$k++] = $arr[$i++];
    else
      $temp[$k++] = $arr[$j++];
  }
  while ($i <= $mid)
    $temp[$k++] = $arr[$i++];
  while ($j <= $right)
    $temp[$k++] = $arr[$j++];
  for ($i = $left, $j = 0; $i <= $right; $i++, $j++)
    $arr[$i] = $temp[$j];
}

function MergeSort(&$arr, $left, $right)
{
  if ($left < $right)
  {
    $mid = floor(($left + $right) / 2);
    MergeSort($arr, $left, $mid);
    MergeSort($arr, $mid + 1, $right);
    Merge($arr, $left, $mid, $right);
  }
}

3、二分查詢-遞迴

function bin_search($arr,$low,$high,$value) {
    if($low>$high)
        return false;
    else {
        $mid=floor(($low+$high)/2);
        if($value==$arr[$mid])
            return $mid;
        elseif($value<$arr[$mid])
            return bin_search($arr,$low,$mid-1,$value);
        else
            return bin_search($arr,$mid+1,$high,$value);
    }
}

4、二分查詢-非遞迴

function bin_search($arr,$low,$high,$value) {
    while($low<=$high) {
        $mid=floor(($low+$high)/2);
        if($value==$arr[$mid])
            return $mid;
        elseif($value<$arr[$mid])
            $high=$mid-1;
        else
            $low=$mid+1;
    }
    return false;
}

5、快速排序

function quick_sort($arr) {
    $n=count($arr);
    if($n<=1)
        return $arr;
    $key=$arr[0];
    $left_arr=array();
    $right_arr=array();
    for($i=1;$i<$n;$i++) {
        if($arr[$i]<=$key)
            $left_arr[]=$arr[$i];
        else
            $right_arr[]=$arr[$i];
    }
    $left_arr=quick_sort($left_arr);
    $right_arr=quick_sort($right_arr);
    return array_merge($left_arr,array($key),$right_arr);
}

6、選擇排序

function select_sort($arr) {
    $n=count($arr);
    for($i=0;$i<$n;$i++) {
        $k=$i;
        for($j=$i+1;$j<$n;$j++) {
           if($arr[$j]<$arr[$k])
               $k=$j;
        }
        if($k!=$i) {
            $temp=$arr[$i];
            $arr[$i]=$arr[$k];
            $arr[$k]=$temp;
        }
    }
    return $arr;
}

7、插入排序

function insertSort($arr) {
    $n=count($arr);
    for($i=1;$i<$n;$i++) {
        $tmp=$arr[$i];
        $j=$i-1;
        while($arr[$j]>$tmp) {
            $arr[$j+1]=$arr[$j];
            $arr[$j]=$tmp;
            $j--;
            if($j<0)
                break;
        }
    }
    return $arr;
}

相關推薦

常見查詢排序演算法PHP實現

下面分享一些最常見的演算法,用PHP如何實現。 1、氣泡排序 function bubble_sort($arr) { $n=count($arr); for($i=0;$i<

實現奇偶數排序演算法JAVA實現

給定一個整數陣列,請調整陣列的順序,使得所有奇數位於陣列前半部分,所有偶數位於陣列後半部分,時間複雜度越小越好。 package com.sort; import java.util.Arrays; public class TestSort { /** * 測試方法 * @par

資料結構常見的八大排序演算法詳細整理

2018年11月01日 21:38:04 雲淡風輕_737711464 閱讀數:3 個人分類: 資料結構

排序演算法python實現

排序演算法一共有2類:    演算法時間fuzh複雜讀與nlogn比較,大為非線性類,小為線性類;         非線性類比較類排序有:交換排序(冒泡,快速),插入排序(簡單插入,shell),歸併排序(2路歸併,多路歸併),選擇排序(簡單選擇,堆排序);      

Python資料結構常見的八大排序演算法詳細整理

前言 八大排序,三大查詢是《資料結構》當中非常基礎的知識點,在這裡為了複習順帶總結了一下常見的八種排序演算法。 常見的八大排序演算法,他們之間關係如下: 排序演算法.png 他們的效能比較: 下面,利用Python分別將他們進行實現。

單鏈表實現氣泡排序演算法C實現

本實現主要採用交換指標的方法,其中附加有單鏈表及其相關的實現 #include <stdio.h> struct Node; typedef struct Node *PtrToNode; typedef PtrToNode List; typedef Pt

MIT 6.001X 2016 12search and sort 查詢排序演算法

為什麼 retrieve(檢索)element of list 所花的時間是不變的? 因為假如list 都是ints 的話 ,每一個element  存在記憶體裡 需要4個位元組,那麼一個有著n個element的list在記憶體裡儲存的形式是這樣的, 給他一個連續的 4n

查詢排序演算法Searching adn Sorting

1,查詢演算法   常用的查詢演算法包括順序查詢,二分查詢和雜湊查詢。   1.1 順序查詢(Sequential search)     順序查詢: 依次遍歷列表中每一個元素,檢視是否為目標元素。python實現程式碼如下:   #無序列表 def sequentialSear

(排序演算法)linux c語言實現簡化版本的插入排序演算法二分插入

 二分插入演算法是在已經排序好的序列裡插入一個元素,是穩定的演算法,關鍵詞是折中。 比如說我要在12345678910裡插入一個3,那麼我先看看中間的數比3大,還是比3小,要是比3大,我就去後一半,如果是比3小,我就去前一半,現在進入某個一半後,再做如此操作,最後將其他的元

插入排序演算法java實現詳解版

插入排序分為兩種,直接插入排序和二分插入排序,本節我們只介紹直接插入排序。這兩種插入排序實際上都是插入排序,唯一的不同就是插入的方式不一樣。 插入排序就是往數列裡面插入資料元素。一般我們認為插入排序就是往一個已經排好序的待排序的數列中插入一個數,使得插入這個數之後,數列仍然有序。 二分插入排序也是用了分

排序演算法之希爾排序c#實現

希爾排序演算法是將陣列的所有元素按照一定增量d分組,對每組內的資料實行插入排序,之後不斷減小增量,每組內所包含的元素也越多,增量減少至1時,整個陣列被分成一組,插入排序結束後整個陣列的排序便完成。演算法流程圖:操作步驟:初始時,有一個大小為 10 的無序序列。(1)在第一趟排

快速查詢區間最值——RMQ演算法ST實現

概述 RMQ(Range Minimum/Maximum Query),即區間最值查詢,是指這樣一個問題:對於長度為n的數列A,回答若干詢問RMQ(A,i,j)(i,j<=n),返回數列A中下標在i,j之間的最小/大值。這兩個問題是在實際應用中經常遇到

利用SIFTRANSAC演算法openCV框架實現物體的檢測與定位,並求出變換矩陣findFundamentalMatfindHomography的比較

本文目標是通過使用SIFT和RANSAC演算法,完成特徵點的正確匹配,並求出變換矩陣,通過變換矩陣計算出要識別物體的邊界(文章中有部分原始碼,整個工程我也上傳了,請點選這裡)。 SIFT演算法是目前公認的效果最好的特徵點檢測演算法,關於該演算法的就不多說了,網上的資料有很多

常用查詢資料結構及演算法Python實現

目錄 一、基本概念 二、無序表查詢 三、有序表查詢 3.1 二分查詢(Binary Search) 3.2 插值查詢 3.3 斐波那契查詢 四、線性索引查詢 4.1 稠密索引 4.2 分塊索引 4.3 倒排索引 五、二叉排序樹 六、 平衡二叉樹 七、多路查詢樹(B樹) 7.1 2-3樹 7.2 2-3-4樹

歸併排序演算法php

概述: 歸併排序的演算法思想:講兩個或兩個以上的元素有序序列合併為一個有序序列。其中,二路歸併排序是最常見的歸併排序。 /** * 歸併排序演算法 */ function mergeSort(&a

最大子陣列演算法Java實現

三種最大子陣列和演算法的Java實現和比較。(1)Java程式碼package com.sau.five.algorithmAnalysis; public class MaxSubsequenceSum { public static int maxSubseque

3種插入排序演算法php

1.直接插入排序(插入排序) function InsertSort($arr, $n) {     for ($i = 1; $i < $n; $i ++) {         $t = $

算法系列插入排序的兩種改進:規避邊界檢測取消交換Java實現

前言:演算法第四版習題2.1.24插入排序的哨兵和習題2.1.25不需要交換的插入排序 規避邊界檢測: 在插入排序的實現中先找到最小的元素並將其置於陣列的第一個位置,可以省掉內迴圈的判斷條件 j>0 。能夠省略判斷條件的元素稱為哨兵。 public class Ex

二分查詢演算法C++實現

#include <iostream> using namespace std; //在一個遞增陣列中,二分查詢值相等的任意一個數字,返回下標位置 int SearchEqualValue(int* arr,int len,int value) { if(a

[Java]各種基礎的查詢排序演算法總結

查詢方法: 1.順序查詢。按陣列的順序從前往後一直比較,直到找到目標值返回。優點:對陣列的結構沒有特定的要求,演算法簡單。缺點:當陣列個數n較大時,效率低下。時間複雜度:最大時間複雜度是O(n),最小時間複雜度是O(1),平均時間複雜度是O(n/2). <span