91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中插入排序算法的應用

發布時間:2020-06-18 11:13:16 來源:億速云 閱讀:184 作者:Leah 欄目:編程語言

今天小編給大家分享的是PHP中插入排序算法的應用,相信大部分人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,話不多說,一起往下看吧。

● 插入排序的思想:

將一個待排序的無序的數組看作是兩個列表,一個有序的列表,一個無序的列表,從無序的列表每次拿出一個待插入的元素,插入到有序的列表中,直到無序列表為空,排序完畢

● 實際舉例:

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

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

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

4. 插入排序實際是需要比較數組元素的總數減一輪,因為第一個元素不需要比較。

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

依次類推,得到完成的有序數組

5. 完整代碼如下:

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

關于PHP中插入排序算法的應用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

军事| 苗栗县| 新民市| 临湘市| 保德县| 承德县| 云龙县| 龙川县| 洞头县| 色达县| 马鞍山市| 吴堡县| 仙游县| 镇原县| 海兴县| 金华市| 嵊州市| 福鼎市| 平阴县| 安阳市| 巩义市| 金寨县| 延吉市| 武宁县| 隆尧县| 黑龙江省| 静海县| 遵化市| 武隆县| 华容县| 建宁县| 嘉峪关市| 夹江县| 宁河县| 雅安市| 丽水市| 福贡县| 二连浩特市| 清徐县| 济源市| 云阳县|