好程式設計師Java教程教你5分鐘瞭解快速排序
好程式設計師 Java 教程教你 5 分鐘瞭解快速排序, 前言:
快速排序是面試中經常會問到的一種排序演算法,對比其他一些排序演算法,快速排序的平均時間相對較少。
快速排序思想介紹
快速排序使用了分治的思想,透過一輪的排序,可以將序列分割成獨立的兩個部分,其中一部分的值均比基準值小,另一部分的值均比基準值大。而後針對兩部分序列再分別按照同樣的演算法進行排序,直到序列整體有序。
以如下序列 arr 為例進行升序排序,說明快速排序的基本演算法
第一個位置的值 23 作為基準值 base ,從右邊開始比較,如果 arr[high]>base,high 前移。
arr[high]<base,arr[low]=arr[high] ,然後 low 後移
Arr[low]<base, 不交換, low 後移
Arr[low]>base,arr[high]=arr[low] , high 前移
Arr[high]<base,arr[low]=base , low 後移,
low 和 high 指向同一個位置,
將基準資料賦值給 low 和 high 指向的同一位置,本輪比較結束。然後,再對 23 前的資料和 23 後面的資料,分別再按照上述演算法進行比較排序,依次類推,直到所有元素有序。
快速排序的程式碼實現
由於對各個子序列都要進行相同演算法的排序,可以採用遞迴思想實現快速排序
- package com.qfedu.vo;
- public class QuickSort {
- public static void quickSort( int [] arr, int low, int high){
- int i,j,temp,t;
- if (low>high){
- return ;
- }
- i=low;
- j=high;
- //temp儲存基準數
- temp = arr[low];
- while (i<j) {
- //先從右邊開發判斷,條件成立,high向左遞減
- while (temp<=arr[j]&&i<j) {
- j--;
- }
- arr[i]=arr[j];
- //再從左邊開始,low依次向右遞增
- while (temp>=arr[i]&&i<j) {
- i++;
- }
- arr[j]=arr[i];
- arr[i]=temp;
- }
- //遞迴呼叫左邊內容進行排序
- quickSort(arr, low, j-1);
- //遞迴呼叫右邊內容進行排序
- quickSort(arr, j+1, high);
- }
- public static void main(String[] args){
- int [] arr = {15,23,7,87,34,56};
- quickSort(arr, 0, arr.length-1);
- for ( int i = 0; i < arr.length; i++) {
- System.out.println(arr[i]);
- }
- }
- }
總結
以上介紹的是普通快速排序,針對快速排序,還有一些改進演算法,可以進一步提高執行效率。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2648334/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Java學習路線分享5分鐘瞭解計數排序程式設計師Java排序
- 好程式設計師Java乾貨分享5分鐘瞭解折半插入排序程式設計師Java排序
- 好程式設計師Java學習路線分享5分鐘瞭解基數排序程式設計師Java排序
- 好程式設計師Java學習路線帶你5分鐘瞭解希爾排序程式設計師Java排序
- 好程式設計師Java教程分享詳細瞭解Javasax解析器程式設計師Java
- 好程式設計師教程分享Java註解和運用註解程式設計程式設計師Java
- 好程式設計師Java教程分享Java之設計模式程式設計師Java設計模式
- 好程式設計師Java教程解讀什麼是swing程式設計師Java
- 好程式設計師Java教程解讀JDBC是什麼程式設計師JavaJDBC
- 好程式設計師Java教程分享Java語法程式設計師Java
- 好程式設計師Java教程Java動態代理機制詳解程式設計師Java
- 好程式設計師Java教程分享List介面程式設計師Java
- 好程式設計師Java教程分享javaweb框架程式設計師JavaWeb框架
- 好程式設計師Java培訓分享如何快速入門Java程式設計程式設計師Java
- 好程式設計師Java教程分享Java面試妙招程式設計師Java面試
- 好程式設計師Java教程分享Java開發工具程式設計師Java
- 好程式設計師Java教程分享Java開發主流框架程式設計師Java框架
- 好程式設計師Java教程分享Java 迴圈結構程式設計師Java
- 好程式設計師Java培訓分享如何快速入門Java程式設計師Java
- 好程式設計師大資料培訓教你快速學習MapReduce程式設計師大資料
- 好程式設計師Java教程分享Jmeter效能測試程式設計師JavaJMeter
- 好程式設計師Java教程分享MyBatis Plus介紹程式設計師JavaMyBatis
- 好程式設計師Java教程:SQL語言之檢視程式設計師JavaSQL
- 好程式設計師Web前端教程分享新手應該瞭解的Cookie知識!程式設計師Web前端Cookie
- 好程式設計師Java教程分享:Java工程師常見面試題程式設計師Java工程師面試題
- 好程式設計師:Java程式設計師面試秘籍程式設計師Java面試
- 好程式設計師Java教程分享Java中this的幾種用法程式設計師Java
- 好程式設計師Java教程分享Java面試題之Hibernate程式設計師Java面試題
- 好程式設計師Java教程分享幾個流行的Java框架程式設計師Java框架
- 好程式設計師Java培訓分享Java集合的兩種排序方法程式設計師Java排序
- 好程式設計師Java教程分享Java物件導向與程式導向程式設計師Java物件
- 好程式設計師Java教程分享Java設計模式的6大原則程式設計師Java設計模式
- 好程式設計師Java培訓分享Java常見排序演算法之插入排序程式設計師Java排序演算法
- 好程式設計師Java教程系列之異常定義程式設計師Java
- 好程式設計師Java教程分享Vue外掛之Axios程式設計師JavaVueiOS
- 好程式設計師Java教程分享MySQL目錄結構程式設計師JavaMySql
- 好程式設計師Java教程之Java面試寶典Java IO篇程式設計師Java面試
- 好程式設計師Java教程分享Java的4大核心基礎程式設計師Java