# 插入排序(數組排序)
## 定義:
> 我們將數組中的數據分為兩個區間,已排序區間和未排序區間。初始已排序區間只有一個元素,就是數組的第一個元素。插入算法的核心思想是取未排序區間中的元素,在已排序區間中找到合適的插入位置將其插入,并保證已排序區間數據一直有序。重復這個過程,直到未排序區間中元素為空,算法結束。

## 代碼:
~~~
/**
* @param $nums
* @return mixed
* 4 3 2 1
*/
function insert_sort($nums){
if(count($nums) <= 1){
return $nums;
}
for($i=1;$i<count($nums);$i++){//控制最大循環次數
$value = $nums[$i];//記錄下當前需要比較的元素的值
for($j=$i-1;$j>=0;$j--){//拿$value值與已排序區的每個值比較,如果大于$value就后移一位
if($nums[$j] > $value){
$nums[$j+1] = $nums[$j];
}else{
break;
}
}
$nums[$j+1] = $value;//把最后一個后移的值替換成為$value,這樣一次循環就完成了
}
return $nums;
}
$nums = [4,3,1,2];
print_r(insert_sort($nums));
~~~
## 插入排序的性能和穩定性
1. 時間復雜度: O(n^2) (n的平方)
2. 空間復雜度:沒有額外的存儲空間,是原地排序算法
3. 算法穩定性:元素相等不會交換,是穩定的排序算法
## 總結
> 插入排序的時間復雜度和冒泡排序一樣,也不是很理想,但是插入排序不涉及數據交換,從更細粒度來區分,性能要略優于冒泡排序。
>
- PHP操作集合
- 獲取字符首字母
- PHP實現定時備份MySQL數據庫
- PHP定時發送郵件
- PHP基本語法
- 總結
- 命名空間
- 錯誤抑制符
- 位運算符
- 原碼,反碼,補碼
- traits
- PHP的反射機制
- const和define的區別
- 語法
- 常用的函數
- 1.變量及打印函數
- 2.引入文件
- 3.常量
- 4.錯誤處理
- 5.面向對象
- 數據結構與算法
- 結構
- 數組
- 索引
- 散列表(哈希表)
- 棧
- 隊列
- 鏈表
- 算法
- 排序算法
- 插入排序
- 冒泡排序
- 選擇排序
- 歸并排序
- 快速排序
- 查找算法
- 二分查找
- 二分查找變形版本1:查詢數據在序列中第一次出現
- 哈希算法
- 算法復雜度
- Smarty模板引擎
- composer
- yaf
- yaf的安裝配置
- 其它
- Java
- JavaSE
- 1.Java發展及JDK安裝配置
- 2.Eclipse的下載及安裝
- 3.Java開發基礎
- 虛擬機
- 2.編輯虛擬機設置
- 1.虛擬機下安裝centos
- 3.安裝vmtools
- Linux
- 1.vi和vim編輯器
- 2.開機、重啟和用戶登錄注銷
- 3.用戶管理
- 4.用戶組管理
- 5.用戶和組的相關文件
- 6.linux運行級別
- 7.幫助指令
- 8.文件目錄類指令
- 9.時間日期類
- 10.搜索查找類
- 11.壓縮和解壓縮
- 12.組管理和權限管理(難點,重點)
- 虛擬主機的配置
- phpstudy快捷配置
- 配置文件配置
- PHP面向對象高級特性
- SPL標準庫(PHP標準庫)
- PHP鏈式操作的實現
- 面向對象編程的基本原則
- 設計模式
- 基本的設計模式