# 冒泡排序
## 定義:
> 冒泡排序只會操作相鄰的兩個數據。每次冒泡操作都會對相鄰的兩個元素進行比較,看是否滿足大小關系要求,如果不滿足就讓它倆互換。一次冒泡會讓至少一個元素移動到它應該在的位置,重復 n 次,就完成了 n 個數據的排序工作。
第一次排序流程:

所謂冒泡,以升序來看,就是每次把待排序序列中的最大值插到已排序序列的最前面,這個過程就像冒泡一樣:

## 代碼實現:
~~~
/**
* @param $nums
* @return mixed
* 4 3 2 1
*/
function bubble_sort($nums){
if(count($nums) <= 1){
return $nums;
}
for($i=0;$i<count($nums);$i++){//控制比較的次數,比較的次數與數組長度有關
$flag = true;//如果為true就表示數組元素位置沒有發生改變,用來控制判斷數組是否排好了序,這樣可以少比較
for($j=0;$j<count($nums)-$i-1;$j++){//控制比較的次數,第一次比較3次,第二次比較2次,第三次比較1次,第四次比較0次
if($nums[$j]>$nums[$j+1]){
$temps = $nums[$j];
$temps[$j] = $nums[$j+1];
$nums[$j+1] = $temps;
$flag = false;
}
}
if($flag){
return $a;
return $nums;
}
}
return $nums;
}
$nums = [1,2,3,4];
print_r(bubble_sort($nums));
~~~
## 冒泡排序的性能和穩定性
1. 時間復雜度: O(n^2) (n的平方)
2. 空間復雜度:只涉及相鄰元素的交換,是原地排序算法
3. 算法穩定性:元素相等不會交換,是穩定的排序算法
## 總結:
時間復雜度是 O(n^2),看起來性能并不是很好,所以我們在實踐中基本不會選用冒泡算法。
- 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鏈式操作的實現
- 面向對象編程的基本原則
- 設計模式
- 基本的設計模式