国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 邏輯算法 > 正文

PHP 排序算法之插入排序

2020-03-22 16:21:53
字體:
供稿:網(wǎng)友
插入排序 Insert Sort

● 插入排序的思想:

將一個(gè)待排序的無序的數(shù)組看作是兩個(gè)列表,一個(gè)有序的列表,一個(gè)無序的列表,從無序的列表每次拿出一個(gè)待插入的元素,插入到有序的列表中,直到html' target='_blank'>無序列表為空,排序完畢

● 實(shí)際舉例:

1. 有一個(gè)無序的一維數(shù)組是這次需要排序的數(shù)組,數(shù)組是:[36,12,96,-1]

2. 首先把數(shù)組的第一個(gè)元素 [36] 看作是一個(gè)獨(dú)立的有序的列表,把剩下的元素 [12, 96, -1] 看作是一個(gè)無序的列表

3. 第一個(gè)待插入的元素就是 12,要把 12 插入到有序的列表中,首先需要 12 和 36 比較,如果帶插入的元素 12 小于 36, 就需要把 12 插入到 36前面,也就是 36 要后移一位。

4. 插入排序?qū)嶋H是需要比較數(shù)組元素的總數(shù)減一輪,因?yàn)榈谝粋€(gè)元素不需要比較。

$arr = [36,12,96,-1];//待插入的數(shù)$insertValue = $arr[1];//待插入數(shù)前面的數(shù)的索引$insertIndek = 1 - 1;//$insertIndek >= 0 保證插入循環(huán)時(shí),不越界,保證第一個(gè)元素的下標(biāo)要大于等0//$insertValue < $arr[$insertIndek] 保證待插入的數(shù)還沒有找到插入的位置,即待插入的數(shù)是小于它前面的那一個(gè)元素的//符合上述條件的,需要將$arr[$insertIndek] 后移while($insertIndek >= 0 && $insertValue < $arr[$insertIndek]) { $arr[$insertIndek+1] = $arr[$insertIndek]; $insertIndek--; //代表的就是有序列表的最前面一個(gè)元素的前面一個(gè)下標(biāo) -1;}//當(dāng)退出循環(huán)時(shí),代表找到位置 $insertIndek + 1$arr[$insertIndek + 1] = $insertValue;//把插入的元素插入到有序列表的第一個(gè)位置或者是沒發(fā)生交換就在本身的位置$arr = [12,36,96,-1];//待插入的數(shù)$insertValue = $arr[2];//待插入數(shù)前面的數(shù)的索引$insertIndek = 2 - 1;//$insertIndek >= 0 保證插入循環(huán)時(shí),不越界,保證第一個(gè)元素的下標(biāo)要大于等0//$insertValue < $arr[$insertIndek] 保證待插入的數(shù)還沒有找到插入的位置,即待插入的數(shù)是小于它前面的那一個(gè)元素的//符合上述條件的,需要將$arr[$insertIndek] 后移while($insertIndek >= 0 && $insertValue < $arr[$insertIndek]) { $arr[$insertIndek+1] = $arr[$insertIndek]; $insertIndek--; //代表的就是有序列表的最前面一個(gè)元素的前面一個(gè)下標(biāo) -1;}//當(dāng)退出循環(huán)時(shí),代表找到位置 $insertIndek + 1$arr[$insertIndek + 1] = $insertValue;//把插入的元素插入到有序列表的第一個(gè)位置或者是沒發(fā)生交換就在本身的位置

依次類推,得到完成的有序數(shù)組

5. 完整代碼如下:

<?phpclass InsertSort{ public static function insertArraySort(array $data):array {  if (!is_array($data)) { return ['message' => '待排序的序列非數(shù)組']; } $count = count($data); if ($count <= 1) { return $data; } for ($i = 1; $i < $count; $i++) { //待插入的元素 $insertValue = $data[$i]; //待插入數(shù)前面的數(shù)的索引 $insertIndek = $i - 1; //$insertIndek >= 0 保證插入循環(huán)時(shí),不越界,保證第一個(gè)元素的下標(biāo)要大于等0/ //$insertValue < $arr[$insertIndek] 保證待插入的數(shù)還沒有找到插入的位置,即待插入的數(shù)是小于它前面的那一個(gè)元素的 //符合上述條件的,需要將$arr[$insertIndek] 后移 while($insertIndek >= 0 && $insertValue < $data[$insertIndek]) { $data[$insertIndek+1] = $data[$insertIndek]; $insertIndek--;//代表的就是有序列表的最前面一個(gè)元素的前面一個(gè)下標(biāo) -1; } //當(dāng)退出循環(huán)時(shí),代表找到位置 $insertIndek + 1 //把插入的元素插入到有序列表的第一個(gè)位置 //或者是沒發(fā)生交換,即待插入元素大于有序列表的最后一個(gè)元素,那么這里只需要將有序列表的最后一個(gè)元素的索引 + 1,把待插入元素放在后 //面一位即可 $data[$insertIndek + 1] = $insertValue;/ } return $data; } }$arr = [36,12,96,-1];var_dump(InsertSort::insertArraySort($arr));

以上就是PHP 排序算法之插入排序的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注 其它相關(guān)文章!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 荔浦县| 西乌| 临武县| 河曲县| 巫山县| 巴东县| 河源市| 抚远县| 鹤岗市| 普陀区| 青神县| 阿拉尔市| 长寿区| 乐安县| 滦平县| 高平市| 科尔| 韶关市| 文安县| 新晃| 无极县| 泰来县| 喀什市| 乐陵市| 梧州市| 施秉县| 罗平县| 新乡县| 连南| 黔西| 锦州市| 江油市| 洛川县| 鹿泉市| 马边| 陇南市| 广南县| 朝阳市| 延吉市| 沙河市| 布尔津县|