ホームページ バックエンド開発 PHPチュートリアル 一般的な PHP アルゴリズム [バブル ソート、クイック ソート、挿入ソート、丸めソート、二分探索、.]

一般的な PHP アルゴリズム [バブル ソート、クイック ソート、挿入ソート、丸めソート、二分探索、.]

Jun 13, 2016 pm 01:17 PM
arr array count return start

一般的な PHP アルゴリズム [バブル ソート、クイック ソート、挿入ソート、選択ソート、バイナリ検索、..]

// 冒泡排序
function bubblesort($arr) {
    for($i=0,$j=count($arr); $i<$j; $i++) {
        for($k=$j-1; $k>$i; $k--) {
            if ($arr[$k] < $arr[$k-1]) list($arr[$k-1], $arr[$k]) = array($arr[$k], $arr[$k-1]);
        } 
    }
    return $arr;
}

$arr = array(1,4,14,3,56,23,435,2,234,2,33,23,123);
print_r(bubblesort($arr));
ログイン後にコピー
// 快速排序
function quicksort($arr) {
    if(($count = count($arr)) <= 1 ) return $arr;
    $base = $arr[0];
    $left = $right = array();
    for($i=1; $i<$count; $i++) {
        if($arr[$i] <= $base) $left[] = $arr[$i];
        else $right[] = $arr[$i];
    }
    $left = quicksort($left);
    $right = quicksort($right);
    return array_merge($left, array($base), $right);
}

echo join(',', quicksort(array(1,3,23,5,234,65,6)));?
ログイン後にコピー
// 插入排序
function insertsort($arr) {
    for($i=1, $j=count($arr); $i<$j; $i++) {
        $k = $i;
        while($k > 0 && $arr[$k-1] > $arr[$k]) {
            list($arr[$k], $arr[$k-1]) = array($arr[$k-1], $arr[$k]);
            $k--;
        }
    }
    return $arr;
}

$array=array(10,8,7,5,1,2,3,4);
print_r(insertsort($array));
ログイン後にコピー

?

// 选择排序, (非递归)
function selectsort($arr) {
    for($i=0, $j=count($arr); $i<=$j; $i++) {
        $min = $i;
        $temp = $arr[$i];
        for($k=$i+1; $k<$j; $k++) {
            if($temp > $arr[$k]) {
                $min = $k;
                $temp = $arr[$k];
            }
        } 
        if($min != $i) list($arr[$min], $arr[$i]) = array($arr[$i], $arr[$min]);
    }
    return $arr;
}

$arr = array(9,3,11,23,90,99,12,34,22,87,32);
print_r(selectsort($arr));
ログイン後にコピー

?

// 选择排序(递归实现)
function selectsort2($arr, $start = 0) {
    if(($count = count($arr)) == $start + 1) return $arr;
    $new = array();
    $min = $arr[$start];
    $min_index = $start;
    for($i=$start+1; $i<$count-1; $i++) {
        if($arr[$i] < $min) {
            $min = $arr[$i];
            $min_index = $i;
        }
    }
    if($arr[$start] != $min) list($arr[$start], $arr[$min_index]) = array($arr[$min_index], $arr[$start]);
    return selectsort($arr, $start + 1);
}
$arr = array(9,3,11,23,90,99,12,34,22,87,32);
print_r(selectsort($arr));
ログイン後にコピー
?

?

?

<?php
// 二分法查找
function binarysearch($arr, $value, $start = 0, $end = NULL) {
    if($end == NULL) $end = count($arr) - 1;
    $index = floor(($start+$end)/2);
    $base = $arr[$index];
    if($value < $base) return binarysearch($arr, $value, $start, $index-1);
    else if($value > $base) return binarysearch($arr, $value, $index+1, $end);
    else return $index;
}

$arr = array(1, 3, 5, 6, 7, 8, 10, 12, 14, 16, 18, 20);
$value = 8;
echo binarysearch($arr, $value);
ログイン後にコピー
?

続きます...

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C言語のreturnの使い方を詳しく解説 C言語のreturnの使い方を詳しく解説 Oct 07, 2023 am 10:58 AM

C 言語における return の使い方は、 1. 戻り値の型が void の関数については、return 文を使用して関数の実行を早期に終了することができます; 2. 戻り値の型が void ではない関数については、 return ステートメントは、関数の実行を終了するためのものです。結果は呼び出し元に返されます。 3. 関数の実行を早期に終了します。関数内で return ステートメントを使用して、関数の実行を早期に終了することもできます。関数が値を返さない場合。

docker start が起動できない場合はどうすればよいですか? docker start が起動できない場合はどうすればよいですか? Oct 21, 2022 pm 03:43 PM

Docker の起動に失敗した場合の解決策: 1. 実行ステータスを確認し、「echo 3 &gt; /proc/sys/vm/drop_caches」コマンドを使用して占有メモリを解放します; 2. 「$netstat -nltp|grep .. .」を使用します。 「」コマンドでポートが占有されているかどうかを確認します。オンライン後に占有されていることが判明した場合は、空いているポートに変更して再起動してください。

Javaのreturn文とfinally文の実行順序は何ですか? Javaのreturn文とfinally文の実行順序は何ですか? Apr 25, 2023 pm 07:55 PM

ソースコード: publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}}#出力 上記のコードの出力は、単純に次のように結論付けることができます:finally の前に return が実行されます。バイトコード レベルで何が起こるかを見てみましょう。以下は、case1 メソッドのバイトコードの一部をインターセプトし、ソース コードを比較して、各命令の意味に注釈を付けます。

カウンタとカウントの違い カウンタとカウントの違い Nov 20, 2023 am 10:01 AM

Count 関数は、指定された範囲内の数値の数をカウントするために使用されます。テキスト、論理値、NULL 値は無視されますが、空のセルはカウントされます。Count 関数は、実際の数値を含むセルの数のみをカウントします。 CountA 関数は、指定された範囲内の空でないセルの数をカウントするために使用されます。実際の数値を含むセルを数えるだけでなく、テキスト、論理値、数式を含む空でないセルの数も数えます。

C# の Array.Sort 関数を使用して配列を並べ替える C# の Array.Sort 関数を使用して配列を並べ替える Nov 18, 2023 am 10:37 AM

タイトル: Array.Sort 関数を使用して C# で配列を並べ替える例 本文: C# では、配列は一般的に使用されるデータ構造であり、多くの場合、配列を並べ替える必要があります。 C# には Array クラスが用意されており、このクラスには配列を簡単に並べ替えるための Sort メソッドがあります。この記事では、C# で Array.Sort 関数を使用して配列を並べ替える方法を示し、具体的なコード例を示します。まず、Array.Sort 関数の基本的な使用法を理解する必要があります。 Array.So

PHPのarray_merge_recursive()関数を使用するシンプルで明確な方法 PHPのarray_merge_recursive()関数を使用するシンプルで明確な方法 Jun 27, 2023 pm 01:48 PM

PHP でプログラミングする場合、多くの場合、配列をマージする必要があります。 PHP には、配列のマージを完了するための array_merge() 関数が用意されていますが、配列内に同じキーが存在する場合、この関数は元の値を上書きします。この問題を解決するために、PHP は配列をマージして同じキーの値を保持できる array_merge_recursive() 関数を言語で提供し、プログラム設計をより柔軟にします。配列マージ

PHP で array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法 PHP で array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法 Jun 26, 2023 pm 01:41 PM

PHP には、配列操作をより便利かつ高速にする強力な配列関数が多数あります。 2 つの配列を結合して連想配列にする必要がある場合、PHP の array_combine 関数を使用してこの操作を実行できます。この関数は、実際には、ある配列のキーを別の配列の値として新しい連想配列に結合するために使用されます。次に、PHP の array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法を説明します。 array_comb について学ぶ

Vue3 はセットアップ構文シュガーをどのように使用して return の書き込みを拒否しますか Vue3 はセットアップ構文シュガーをどのように使用して return の書き込みを拒否しますか May 12, 2023 pm 06:34 PM

Vue3.2 セットアップ構文シュガーは、単一ファイル コンポーネント (SFC) で結合された API を使用して、Vue3.0 の面倒なセットアップを解決するコンパイル時構文シュガーです。宣言された変数、関数、インポートによって導入されたコンテンツは、インポートによって公開されます。使用上の問題点 1. 宣言した変数、関数、import で導入した内容を使用中に return する必要はなく、糖衣構文を使用することができます。 // 導入した内容をインポート import{getToday }from'./utils'//variable constmsg='Hello !'//function func

See all articles