## **快速排序**
快速排序是一個知名度極高的排序算法,其對于大數據的優秀排序性能和相同復雜度算法中相對簡單的實現使它注定得到比其他算法更多的寵愛。
## **算法描述**
1. 從數列中挑出一個元素,稱為"基準"(pivot),
2. 重新排序數列,所有比基準值小的元素擺放在基準前面,所有比基準值大的元素擺在基準后面(相同的數可以到任何一邊)。在這個分區結束之后,該基準就處于數列的中間位置。這個稱為分區(partition)操作。
3. 遞歸地(recursively)把小于基準值元素的子數列和大于基準值元素的子數列排序。
## **穩定性**
快速排序并不是穩定的。這是因為我們無法保證相等的數據按順序被掃描到和按順序存放。
## **適用場景**
快速排序在大多數情況下都是適用的,尤其在數據量大的時候性能優越性更加明顯。但是在必要的時候,需要考慮下優化以提高其在最壞情況下的性能。
## **JAVA代碼實現**
```
public static void quickSort(int[] arr){
qsort(arr, 0, arr.length-1);
}
private static void qsort(int[] arr, int low, int high){
if (low >= high)
return;
int pivot = partition(arr, low, high); //將數組分為兩部分
qsort(arr, low, pivot-1); //遞歸排序左子數組
qsort(arr, pivot+1, high); //遞歸排序右子數組
}
private static int partition(int[] arr, int low, int high){
int pivot = arr[low]; //基準
while (low < high){
while (low < high && arr[high] >= pivot) --high;
arr[low]=arr[high]; //交換比基準大的記錄到左端
while (low < high && arr[low] <= pivot) ++low;
arr[high] = arr[low]; //交換比基準小的記錄到右端
}
//掃描完成,基準到位
arr[low] = pivot;
//返回的是基準的位置
return low;
}
```
- JDK常用知識庫
- JDK各個版本安裝
- Java8流
- 算法
- 十大排序算法
- 冒泡排序
- 選擇排序
- 插入排序
- 歸并排序
- 快速排序
- 堆排序
- 希爾排序
- 計數排序
- 桶排序
- 基數排序
- 總結
- 常用工具類
- 浮點型計算
- 時間格式處理
- 常用功能點思路整理
- 登錄
- 高并發
- 線程安全的單例模式
- Tomcat優化
- Tomcat之APR模式
- Tomcat啟動過慢問題
- 常用的數據庫連接池
- Druid連接池
- 緩存
- Redis
- SpringBoot整合Redis
- 依賴和配置
- RedisTemplate工具類
- 工具類使用方法
- Redis知識庫
- Redis安裝
- Redis配置參數
- Redis常用Lua腳本
- MongoDB
- SpringBoot操作MongoDB
- 依賴和配置
- MongoDB工具類
- 工具類使用方法
- 消息中間件
- ActiveMq
- SpringBoot整合ActiveMq
- 框架
- SpringBoot
- 定時任務
- 啟動加載
- 事務
- JSP
- 靜態類注入
- SpringSecurity
- Shiro
- 配置及整合
- 登陸驗證
- 權限驗證
- 分布式應用
- SpringMVC
- ORM框架
- Mybatis
- 增
- 刪
- 改
- 查
- 程序員小笑話
- 我給你講一個TCP的笑話吧
- 二進制笑話
- JavaScript的那點東西
- JavaScript內置對象及常見API詳細介紹
- JavaScript實現Ajax 資源請求
- JavaScript干貨
- 架構師成長之路
- JDK源碼解析
- ArrayList源碼解讀
- 設計模式
- 微服務架構設計模式
- 逃離單體煉獄
- 服務的拆分策略
- 全面解析SpringMvc框架
- 架構設計的六大原則
- 并發集合
- JUC并發編程
- 搜索引擎
- Solr
- Solr的安裝
- 分布式服務框架
- Dubbo
- 從零開始學HTMl
- 第一章-初識HTML
- 第二章-認識HTML標簽