排序算法系列:快速排序算法
生活随笔
收集整理的這篇文章主要介紹了
排序算法系列:快速排序算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
概述
在前面說到了兩個關于交換排序的算法:冒泡排序與奇偶排序。
本文就來說說交換排序的最后一拍:快速排序算法。之所以說它是快速的原因,不是因為它比其他的排序算法都要快。而是從實踐中證明了快速排序在平均性能上的確是比其他算法要快一些,不然快速一說豈不是在亂說?
本文就其原理、過程及實現幾個方面講解一下快速排序算法。
版權聲明
著作權歸作者所有。
商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
作者:Q-WHai
發表日期:2016年3月1日
鏈接:https://qwhai.blog.csdn.net/article/details/50622744
來源:CSDN
更多內容:分類 >> 算法與數學
目錄
文章目錄
- 概述
- 版權聲明
- 目錄
- 快速排序
- 算法原理
- 原理分析
- 原理圖
- 算法步驟
- 步驟
- 過程演示圖
- 邏輯實現
- 復雜度分析
- 番外
- Ref
- GitHub源碼下載
快速排序
算法原理
原理分析
快速排序(Quicksort)是對冒泡排序的一種改進。
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
原理圖
算法步驟
步驟
過程演示圖
邏輯實現
/** 排序的核心算法* * @param array* 待排序數組* @param startIndex* 開始位置* @param endIndex* 結束位置*/private void sortCore(int[] array, int startIndex, int endIndex) {if (startIndex >= endIndex) {return;}int boundary = boundary(array, startIndex, endIndex);sortCore(array, startIndex, boundary - 1);sortCore(array, boundary + 1, endIndex);}/** 交換并返回分界點* * @param array* 待排序數組* @param startIndex* 開始位置* @param endIndex* 結束位置* @return* 分界點*/private int boundary(int[] array, int startIndex, int endIndex) {int standard = array[startIndex]; // 定義標準int leftIndex = startIndex; // 左指針int rightIndex = endIndex; // 右指針while(leftIndex < rightIndex) {while(leftIndex < rightIndex && array[rightIndex] >= standard) {rightIndex--;}array[leftIndex] = array[rightIndex];while(leftIndex < rightIndex && array[leftIndex] <= standard) {leftIndex++;}array[rightIndex] = array[leftIndex];}array[leftIndex] = standard;return leftIndex;}復雜度分析
| 排序方法 | 時間復雜度 | 空間復雜度 | 穩定性 | 復雜性 | ||
| 平均情況 | 最壞情況 | 最好情況 | ||||
| 快速排序 | O(nlog2n) | O(n2) | O(nlog2n) | O(log2n) | 不穩定 | 較復雜 |
番外
Ref
- 《算法導論 (第3版)》
- 《編程珠璣 (第2版)》
GitHub源碼下載
- https://github.com/qwhai/algorithms-sort
總結
以上是生活随笔為你收集整理的排序算法系列:快速排序算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 密码学:RSA加密算法详解
- 下一篇: 深入理解Lambda