1. 程式人生 > >演算法 -- Java實現快速排序(圖解 + 程式碼實現)

演算法 -- Java實現快速排序(圖解 + 程式碼實現)

排序思想:

通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。

圖解:

這裡寫圖片描述
這裡寫圖片描述

排序規則:

  • 1)設定兩個變數i、j,排序開始的時候:i=0,j=N-1;   
  • 2)以第一個陣列元素作為關鍵資料,賦值給key,即 key=A[0];   
  • 3)從j開始向前搜尋,即由後開始向前搜尋(j=j-1即j- -),
  • 找到第一個小於key的值A[j],A[i]與A[j]交換;   
  • 4)從i開始向後搜尋,即由前開始向後搜尋(i=i+1即i++),
  • 找到第一個大於key的A[i],A[i]與A[j]交換;   
  • 5)重複第3、4、5步,直到 I=J;
  • (3,4步是在程式中沒找到時候j=j-1,i=i+1,直至找到為止。
  • 找到並交換的時候i, j指標位置不變。
  • 另外當i=j這過程一定正好是i+或j-完成的最後令迴圈結束。)

程式碼實現:

public static void quickSort(int[] array, int indexStart, int indexEnd) {
    int pivotIndex = (indexStart + indexEnd) / 2;
    // swap
    swap(array
, pivotIndex, indexEnd); int k = partition(array, indexStart - 1, indexEnd, array[indexEnd]); swap(array, k, indexEnd); if ((k - indexStart) > 1) quickSort(array, indexStart, k - 1); if ((indexEnd - k) > 1) quickSort(array, k + 1, indexEnd); } private static int
partition(int[] array, int left, int right, int pivot) { do { while (array[++left] < pivot) ; while ((right != 0) && array[--right] > pivot) ; swap(array, left, right); } while (left < right); swap(array, left, right); return left; } public static void swap(int[] array, int i, int j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; }

相關推薦

演算法 -- Java實現快速排序(圖解 + 程式碼實現)

排序思想: 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資

演算法 -- Java實現氣泡排序(圖解 + 程式碼實現)

排序思想: 相鄰元素兩兩比較,大的往後放,第一次完畢,最大值出現在了最大索引處(每比較完一趟,就選出一個最大值放到了後面),同理繼續可以得到一個排好序的陣列 排序圖解: 排序規

GO語言quicksort實現.快速排序程式碼實現

package main import ( "fmt" "math/rand" "time" ) func main() { var z []int for i := 0; i <

快速排序程式碼實現(python3版)及其時間空間複雜度分析

快速排序是對氣泡排序的一種改進。基本思想是:通過一躺排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按次方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。最壞情況的時間複雜度為O(n2),最好情況時間複雜度

Java中選擇排序程式碼實現

public class ChoiseDemo {/*** 選擇排序:從0索引開始,依次和後面的元素比較,小的往前放,第一次完畢,最小值出現在最小索引處。* @param args*/public static void main(String[] args) {int a

常用排序演算法java程式碼實現---快速排序,氣泡排序,選擇排序

快速排序 public class QuickSort { public void qSort(int[] arr,int left,int right) { if(left>right) { return ; } int i = le

Java程式碼實現快速排序(QuickSort)

Java程式碼實現快速排序(QuickSort) 核心思想 如果要排序陣列中下標從p到r之間的一組資料,我們選擇p到r之間的任意一個數據為pivot(分割槽點)。 我們遍歷p到r之間的資料,將小於pivot的放到左邊,將大於pivot的放到右邊,將pivot放到中間。經過這一

演算法java——簡單實現快速排序

快速排序 快速排序是對氣泡排序的改進,它使用分治法的思想,每次迴圈根據指定的基準數,將其他元素分別放置其左右(升序排序,大的放右小的放左),第二次迴圈,以基準數為中心,分為左右兩部分,每部分再通過新的基準數排序…(下邊來個小例子解釋)。 基準數:一般指定第

JAVA快速排序演算法實現

使用快速排序演算法對a[0,n-1]進行排序,從a[0,n-1]中選擇一個元素作為middle,該元素為中點(支點),把剩下的元素分為兩段——left和right;使得left中的元素都小於或等於中點,right中的元素都大於或等於中點。遞迴的使用快速排序演算法

java實現快速排序演算法

package cn.com.wanghy; /** * 快速排序:是對起泡排序的一種改進,它的基本思想是:通過一趟排序將待排序記錄分割成獨立的兩部分, * 其彙總一部分記錄的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩部分繼續進行排序,已達到 * 整個序列有序

排序演算法-Java實現快速排序演算法

​​   開篇介紹 大家好,公眾號【Java極客思維】近期會整理一些Java高頻面試題分享給小夥伴,也希望看到的小夥伴在找工作過程中能夠用得到!本章節主要針對Java快速排序演算法的實現進行分享。   首先,來看一下,快速排序的實現的動態圖: ​   快速排序介紹: 快速排序,根

Java實現快速排序

static nlogn -- 可能 超過 highlight uic 數組 images 一、快速排序的思想   基於分治的思想,是冒泡排序的改進型。首先在數組中選擇一個基準點(該基準點的選取可能影響快速排序的效率,後面講解選取的方法),然後分別從數組的兩端掃描數組,設兩

使用java實現快速排序的一個簡單例子

fast val rgs 快速 實現 個數 static void sta public static void main(String[] args) { // 測試排序 Random r = new Random(); int arr[] = new

Java快速排序的非遞歸實現

scrip swa java版 sys ext 遞歸實現 ref src 分享   快速排序一般采用遞歸方法(詳見快速排序及其優化),但遞歸方法一般都可以用循環代替。本文實現了java版的非遞歸快速排序。 更多:數據結構與算法合集 思路分析   采用非遞歸的方法,首

使用java實現快速排序(我認為是最簡單最容易理解的版本)

一切都在程式碼和註釋之中。複製貼上就能跑,邊跑邊看才是最愉快的。 所以,話不多說,放碼過來。   public class QuickSort { public static void main(String[] args) { int x[]={6,1,2,7,9,1

python 三行程式碼實現快速排序

python 三行程式碼實現快速排序 最近在看 python cookbook , 裡面的例子很精彩,這裡就幫過來,做個備忘錄 主要利用了行數的遞迴呼叫和Python的切片特性,解釋一下每行程式碼的含義: 第1行: #coding:utf-8 指定utf

(排序演算法)linux c語言實現快速排序(氣泡排序的改進版)

 快速排序演算法是對氣泡排序演算法的一種改進,氣泡排序是對單個元素的升降,快速排序是對所有元素的升降,不過這個升降是取了某一個標準的前提下,在本文程式碼中,就以a[i],其實就是以最左邊的元素為參考,比較交換之後,將這個參考元素放到分界的地方,即i的位置。 程式碼如下,裡面有比較詳細的

演算法導論 第六章:堆排序 筆記(堆、維護堆的性質、建堆、堆排序演算法、優先順序佇列、堆排序程式碼實現

堆排序(heapsort) 像合併排序而不像插入順序,堆排序的執行時間為O(nlgn) 。像插入排序而不像合併排序,它是一種原地( in place) 排序演算法:在任何時候,陣列中只有常數個元素儲存在輸入陣列以外。 堆: (二叉)堆資料結構是一種陣列物件,它可以被視為一棵完全二叉樹。樹

java實現快速排序一種常規的,一種是左程雲的方式。

java實現快速排序: 一:先來一個常規快排: 這個方式就是我們的基準值一直在兩個邊界徘徊,要麼在less的較大邊界,要麼是在more的小邊界,其實就是在居中位置徘徊。 package chapter1; //來一個快排,常規快排 public class QuickSort {

Java 實現快速排序法對陣列進行排序

 快速排序是對氣泡排序的一種改進,其排序速度相對較快。 基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料要小,然後再按照這個方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列的目的。最壞情況的