日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

PHP的几种排序算法的比较

發(fā)布時間:2024/4/15 php 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP的几种排序算法的比较 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

這里列出了幾種PHP的排序算法的時間比較的結(jié)果,,希望對大家有所幫助

/** php 四種排序算法的時間與內(nèi)置的sort排序比較* 3000個元素,四種算法的排序所用的時間比較* 冒泡排序 857.98192024231ms* 選擇排序 903.74493598938ms* 插入排序 296.8270778656ms* 快速排序 15.607833862305ms* sort排序 0.95200538635254ms* 歸并排序 14.61386680603ms* *//* * @param 冒泡排序 * 它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。 * 走訪數(shù)列的工作是重復(fù)地進行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。 * */ function BubbleSort($arr) {$len = count($arr);//設(shè)置一個空數(shù)組 用來接收冒出來的泡//該層循環(huán)控制 需要冒泡的輪數(shù)for ($i = 1; $i < $len; $i++) {$flag = false; //本趟排序開始前,交換標(biāo)志應(yīng)為假//該層循環(huán)用來控制每輪 冒出一個數(shù) 需要比較的次數(shù)for ($k = 0; $k < $len - $i; $k++) {//從小到大排序if ($arr[$k] > $arr[$k + 1]) {$tmp = $arr[$k + 1];$arr[$k + 1] = $arr[$k];$arr[$k] = $tmp;$flag = true;}}if(!$flag) return $arr;} }/* * @param 選擇排序法 * 每一次從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數(shù)據(jù)元素排完。 * 選擇排序是不穩(wěn)定的排序方法(比如序列[5, 5, 3]第一次就將第一個[5]與[3]交換,導(dǎo)致第一個5挪動到第二個5后面) * */ function selectSort($array){$temp = 0;for($i = 0;$i < count($array) - 1;$i++){$minVal = $array[$i]; //假設(shè)$i就是最小值$minValIndex = $i;for($j = $i+1;$j < count($array);$j++){if($minVal > $array[$j]){ //從小到大排列$minVal = $array[$j]; //找最小值$minValIndex = $j;}}$temp = $array[$i];$array[$i] = $array[$minValIndex];$array[$minValIndex] = $temp;} }/* * 插入排序法 * 每步將一個待排序的紀錄,按其關(guān)鍵碼值的大小插入前面已經(jīng)排序的文件中適當(dāng)位置上,直到全部插入完為止。 * 算法適用于少量數(shù)據(jù)的排序,時間復(fù)雜度為O(n^2)。是穩(wěn)定的排序方法。 * */ function insertSort($array){ //從小到大排列 //先默認$array[0],已經(jīng)有序,是有序表for($i = 1;$i < count($array);$i++){$insertVal = $array[$i]; //$insertVal是準(zhǔn)備插入的數(shù)$insertIndex = $i - 1; //有序表中準(zhǔn)備比較的數(shù)的下標(biāo)while($insertIndex >= 0 && $insertVal < $array[$insertIndex]){$array[$insertIndex + 1] = $array[$insertIndex]; //將數(shù)組往后挪$insertIndex--; //將下標(biāo)往前挪,準(zhǔn)備與前一個進行比較 }if($insertIndex + 1 !== $i){$array[$insertIndex + 1] = $insertVal;}} }/* * 快速排序法 * 通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小, * 然后再按此方法對這兩部分數(shù)據(jù)分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數(shù)據(jù)變成有序序列。 * */ function quickSort($array){if(!isset($array[1])) return $array;$mid = $array[0]; //獲取一個用于分割的關(guān)鍵字,一般是首個元素$leftArray = array();$rightArray = array();foreach($array as $v){if($v > $mid)$rightArray[] = $v; //把比$mid大的數(shù)放到一個數(shù)組里if($v < $mid)$leftArray[] = $v; //把比$mid小的數(shù)放到另一個數(shù)組里 }$leftArray = quickSort($leftArray); //把比較小的數(shù)組再一次進行分割$leftArray[] = $mid; //把分割的元素加到小的數(shù)組后面,不能忘了它哦$rightArray = quickSort($rightArray); //把比較大的數(shù)組再一次進行分割return array_merge($leftArray,$rightArray); //組合兩個結(jié)果 }/* * 歸并排序 * 歸并排序是指將兩個或兩個以上有序的數(shù)列(或有序表),合并成一個仍然有序的數(shù)列(或有序表)。 * 這樣的排序方法經(jīng)常用于多個有序的數(shù)據(jù)文件歸并成一個有序的數(shù)據(jù)文件。 * */ function mergeSort(&$arr) {$len = count($arr);//求得數(shù)組長度mSort($arr, 0, $len-1);return $arr; } //實際實現(xiàn)歸并排序的程序 function mSort(&$arr, $left, $right) {if($left < $right) {//說明子序列內(nèi)存在多余1個的元素,那么需要拆分,分別排序,合并//計算拆分的位置,長度/2 去整$center = floor(($left+$right) / 2);//遞歸調(diào)用對左邊進行再次排序: mSort($arr, $left, $center);//遞歸調(diào)用對右邊進行再次排序mSort($arr, $center+1, $right);//合并排序結(jié)果 mergeArray($arr, $left, $center, $right);} } //將兩個有序數(shù)組合并成一個有序數(shù)組 function mergeArray(&$arr, $left, $center, $right) {//設(shè)置兩個起始位置標(biāo)記$a_i = $left;$b_i = $center+1;while($a_i<=$center && $b_i<=$right) {//當(dāng)數(shù)組A和數(shù)組B都沒有越界時if($arr[$a_i] < $arr[$b_i]) {$temp[] = $arr[$a_i++];} else {$temp[] = $arr[$b_i++];}}//判斷 數(shù)組A內(nèi)的元素是否都用完了,沒有的話將其全部插入到C數(shù)組內(nèi):while($a_i <= $center) {$temp[] = $arr[$a_i++];}//判斷 數(shù)組B內(nèi)的元素是否都用完了,沒有的話將其全部插入到C數(shù)組內(nèi):while($b_i <= $right) {$temp[] = $arr[$b_i++];}//將$arrC內(nèi)排序好的部分,寫入到$arr內(nèi):for($i=0, $len=count($temp); $i<$len; $i++) {$arr[$left+$i] = $temp[$i];} }$a = array_rand(range(1,10000), 3000); //生成3000個元素的隨機數(shù)組 shuffle($a); //打亂數(shù)組的順序 $t1 = microtime(true); BubbleSort($a); //冒泡排序 $t2 = microtime(true); echo "冒泡排序用時:".(($t2-$t1)*1000).'ms'."\n";$t3 = microtime(true); selectSort($a); //選擇排序 $t4 = microtime(true); echo "選擇排序用時:".(($t4-$t3)*1000).'ms'."\n";$t5 = microtime(true); insertSort($a); //插入排序 $t6 = microtime(true); echo "插入排序用時:".(($t6-$t5)*1000).'ms'."\n";$t7 = microtime(true); quickSort($a); //快速排序 $t8 = microtime(true); echo "快速排序用時:".(($t8-$t7)*1000).'ms'."\n";$t9 = microtime(true); sort($a); $t10 = microtime(true); echo "sort排序用時:".(($t10-$t9)*1000)."ms"."\n";$t11 = microtime(true); mergeSort($a); $t12 = microtime(true); echo "歸并排序用時:".(($t12-$t11)*1000)."ms";

?從時間上來看,快速排序和歸并排序在時間上比較有優(yōu)勢,但是也比不上sort排序,歸并排序比較占用內(nèi)存!

轉(zhuǎn)載于:https://www.cnblogs.com/jing1208/p/6289840.html

總結(jié)

以上是生活随笔為你收集整理的PHP的几种排序算法的比较的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产欧美日韩综合精品一区二区三区 | 黄色av网站在线免费观看 | 一区二区免费播放 | 中国国产bdsm紧缚捆绑 | 五月婷婷六月婷婷 | 亚洲AV无码成人精品区麻豆 | 久久av资源网 | 国产精品第一页在线观看 | 逼逼爱插插网站 | 国产视频在线观看一区 | 一级免费观看 | 欧美日韩一区二区不卡 | 天天看天天干 | 午夜激情电影在线观看 | 免费网站在线观看视频 | 久久亚洲AV无码 | 粉嫩av网| 久热久操 | 国产精品无码午夜福利 | 欧美裸体xxxx极品少妇 | 精品欧美久久久 | 91精品国产一区二区三竹菊影视 | 久久国产一区二区三区 | 成人四色| 亚洲精品成人久久 | 中文字幕在线观看不卡 | 久久精品成人一区二区三区蜜臀 | 国产亚洲精品美女久久久久 | 欧美一级黄色片网站 | 国产又粗又猛又爽又黄的视频在线观看动漫 | 操人在线观看 | 日本人jizz| 一起草av在线 | 天堂av免费在线 | 骚虎av| 精品少妇人妻av免费久久洗澡 | 艹男人的日日夜夜 | 女女h百合无遮羞羞漫画软件 | 一区二区在线免费视频 | 亚洲性欧美 | 国产99久久 | 国产精品一区无码 | 美女被揉胸视频 | 韩国三级做爰高潮 | 日韩精品一区二区三区国语自制 | 国产精品国产三级国产专区52 | 色屁屁www影院免费观看入口 | 色六月婷婷 | 老司机久久精品视频 | 免费观看国产精品视频 | 琪琪电影午夜理论片八戒八戒 | 亚洲中文字幕无码一区二区三区 | 一本久道久久 | 亚洲激情av | 欧美精品乱码久久久久久按摩 | 欧美 日韩 中文字幕 | 性欧美熟妇videofreesex | 欧美激情久久久久 | 亚洲视频在线观看一区 | 性欧美熟妇videofreesex | 日韩av线| 丝袜av网站| 污视频在线观看免费 | 国产精品亚洲自拍 | 91视频黄色 | 日本一级二级视频 | 国产成年人视频网站 | 天天夜夜人人 | 国产69视频在线观看 | 久久国产加勒比精品无码 | 欧美情侣性视频 | 亚洲无人区码一码二码三码 | 欧美午夜精品久久久久久人妖 | 日本在线不卡一区二区 | 国产中文字幕三区 | 毛片www| 亚洲成av人片在线观看无 | 国产精品久久免费 | 欧美亚洲91 | 日韩av在线高清 | 新版红楼梦在线高清免费观看 | 婷婷调教口舌奴ⅴk | 日韩欧美精品中文字幕 | 午夜影院一区 | 国产精品久久久久久久久久久新郎 | 奇米影视在线观看 | 国产一区视频免费观看 | 黄色大网站 | 影音先锋中文字幕第一页 | 美丽的姑娘在线观看 | 顶臀精品视频www | 二三区视频 | 狠久久| 影音先锋人妻啪啪av资源网站 | 国产激情综合 | 亚洲福利在线视频 | 日韩av中文字幕在线免费观看 | 中文字幕女同 | 51久久 |