1.冒泡排序算法
過(guò)程:
1.遍歷整個(gè)數(shù)組,每?jī)蓛上噜彽脑剡M(jìn)行比較,如$a[$i]>$a[$i+1]則互換位置,每次比較消除一個(gè)逆序。
2.每一次循環(huán)后,下次再需要循環(huán)的次數(shù)減少1。
<?php // 冒泡排序 $arr = createarr(20); printarr($arr); popsort($arr); printarr($arr); function createarr($num=10){ $arr = array(); for($i=0; $i<$num; $i++){ array_push($arr, mt_rand(0,999)); } return $arr; } function printarr($arr){ echo 'arr:'.implode(',', $arr).'<br>'; } function popsort(&$arr){ for($i=0,$length=count($arr)-1; $i<$length; $i++){ for($j=0; $j<$length-$i; $j++){ if($arr[$j]>$arr[$j+1]){ $tmp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $tmp; } } } } ?>
2.二分法插入排序
過(guò)程:
1.首先,原數(shù)組是一個(gè)有序序列,$low=0 $high=count($arr)-1。
2.將要插入的數(shù)與數(shù)組中間位置的元素進(jìn)行比較,
如果比中間元素大,則$low=$mid+1作為下一次判斷的數(shù)組開(kāi)頭。
如果比中間元素小,則$high=$mid-1作為下一次判斷的數(shù)組結(jié)尾。
3.直到$low>$high結(jié)束,$low就是新元素插入的位置。
4.將數(shù)組中從$low開(kāi)始的元素全部向后移動(dòng)一位,之后在$low位置插入新元素。?
<?php // 二分法插入排序 $arr = createarr(20); $key = mt_rand(0,99); printarr($arr); echo 'key='.$key.'<br>'; binsort($arr, $key); printarr($arr); function createarr($num=10){ $arr = array(); for($i=0; $i<$num; $i++){ array_push($arr, mt_rand(0,99)); } sort($arr); // 有序序列 return $arr; } function printarr($arr){ echo 'arr:'.implode(',', $arr).'<br>'; } function binsort(&$arr, $key){ $low = 0; $high = count($arr)-1; while($low<=$high){ $m = $low + (int)(($high-$low)/2); $mkey = $arr[$m]; if($key>=$mkey){ $low = $m + 1; }else{ $high = $m - 1; } } // 移動(dòng)插入位置之后的元素,插入新元素 for($i=count($arr)-1; $i>=$low; $i--){ $arr[$i+1] = $arr[$i]; } $arr[$low] = $key; } ?>
3.快速排序
過(guò)程:
1. 在數(shù)組中找一個(gè)元素作為key,一般取數(shù)組第一個(gè)元素作為key?
2. i=0, j=數(shù)組長(zhǎng)度-1?
3. j-- 當(dāng) arr[j]
5. 重復(fù)3,4 直到 i==j 時(shí),完成。?
6. 將key分隔的左右兩組元素再分別執(zhí)行 1,2,3,4,5 (遞歸)。
<?php // 快速排序 $arr = createarr(20); printarr($arr); quicksort($arr, 0, count($arr)-1); printarr($arr); function createarr($num=10){ $arr = array(); for($i=0; $i<$num; $i++){ array_push($arr, mt_rand(0,999)); } return $arr; } function printarr($arr){ echo 'arr:'.implode(',', $arr).'<br>'; } function quicksort(&$arr, $low, $high){ if($low>=$high){ return ; } $key = $arr[$low]; $i = $low; $j = $high; $flag = 1; while($i!=$j){ switch($flag){ case 0: if($arr[$i]>$key){ $tmp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $tmp; $flag = 1; }else{ $i++; } break; case 1: if($arr[$j]<$key){ $tmp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $tmp; $flag = 0; }else{ $j--; } break; } } quicksort($arr, $low, $i-1); quicksort($arr, $i+1, $high); } ?>
? 本篇文章講解了于冒泡,二分法插入,快速排序算法,更多相關(guān)內(nèi)容請(qǐng)關(guān)注php中文網(wǎng)。
相關(guān)推薦:
如何通過(guò)php 過(guò)濾html標(biāo)記屬性類(lèi)
關(guān)于PHP 遍歷文件夾及文件類(lèi)及處理類(lèi)
以上就是關(guān)于冒泡,二分法插入,快速排序算法的介紹的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)