Java 快速排序法
原理簡介
快速排序原理即是,選擇陣列中的一個元素作為基準值 pivot(通常使用第一個就行),然後遍歷其他元素,將小於 pivot 的元素放置在左邊,將大於 pivot 的元素放置在右邊。如是你可以得到兩個子陣列,再依次對子陣列進行快速排序,最終完成排序。
時間複雜度
快速排序比選擇排序快得多,其時間複雜度為 O(n * lg n),是最快的排序演算法之一。最糟糕的情況下,快速排序的時間複雜度為 O(n^2)。
程式碼實現
Java 的快速排序示例如下:
public class Main { public static void main(String[] args) { int[] arr = new int[] { 5, 4, 8, 6, 3, 9, 0, 1, 7, 2 }; quickSort(arr, 0, arr.length - 1); printArray(arr); } public static void quickSort(int[] arr, int start, int end) { if (end <= start) { return; } int low = start; int high = end; int pivot = arr[low]; while (low < high) { while (low < high && arr[high] >= pivot) { high--; } arr[low] = arr[high]; // 將小於 pivot 的數放在地位 while (low < high && arr[low] <= pivot) { low++; } arr[high] = arr[low]; // 將大於 pivot 的數放在高位 } arr[low] = pivot; quickSort(arr, start, low - 1); // 遞迴排序左半部分 quickSort(arr, low + 1, end); // 遞迴排序右半部分 } public static void printArray(int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } } }
執行結果為:
0 1 2 3 4 5 6 7 8 9
相關推薦
Java 快速排序法
原理簡介 快速排序原理即是,選擇陣列中的一個元素作為基準值 pivot(通常使用第一個就行),然後遍歷其他元素,將小於 pivot 的元素放置在左邊,將大於 pivot 的元素放置在右邊。如是你可以得到兩個子陣列,再依次對子陣列進行快速排序,最終完成排序。
Java常用的八種排序演算法與程式碼實現(二):歸併排序法、快速排序法
注:這裡給出的程式碼方案都是通過遞迴完成的 --- 歸併排序(Merge Sort): 分而治之,遞迴實現 如果需要排序一個數組,我們先把陣列從中間分成前後兩部分,然後對前後兩部分進行分別排序,再將排好序的數組合並在一起,這樣整個陣列就有序了 歸併排序是穩定的排序演算法,時間
Java 實現快速排序法對陣列進行排序
快速排序是對氣泡排序的一種改進,其排序速度相對較快。 基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料要小,然後再按照這個方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列的目的。最壞情況的
快速排序法 Java實現
快速排序法又叫二分法排序: import java.util.Random; public class Quicksort { public static void main(String
快速排序法-Java實現
public static void quickSort(int[] a, int left, int right) { int f, t; int rtemp, ltemp; ltemp = left; rtemp = right; f = a[(left + right)
快速排序法(java 程式碼)
遞迴實現快速排序法: * 以一個值為基準值(通常第一個),把陣列分成兩部分: 前面部分的值都比基準值小, 後面部分的值都比基準值大. * 1.每一次遞迴迴圈以第一個值為分界點, * (1).先從後面開始檢索,值比基準值大就略過,比之小就把此值移到左邊指標位置 * (2).再
快速排序法
ron 它的 jet amp uek cnblogs 方法 ++ 部分 這個排序方法的時間復雜度為O(nlogn),最壞時間復雜度為O(n^2),所以說是屬於所有排序方法中比較高效率的一種了。 這種排序方法的基本思想是: 先找到一個區間中的一個基準點,然後找到這個區間
java快速排序
clas end 一個 bsp string 處理 bre 大於 tostring 代碼如下: public class QuickSort { //交換data數組中i和j兩處索引的元素 private static void swap(DataWrap
C語言實現快速排序法(分治法)
下一個 enter hang partition 等於 就是 tor log markdown title: 快速排序法(quick sort) tags: 分治法(divide and conquer method) grammar_cjkRuby: true ---
java——快速排序基準位置的選取方法和快速排序優化
一、 快速排序基準位置的選取方法 1.固定位置法(就是選取的基準是固定的、一般是陣列的第一個元素) 2.隨機選取基準法 import java.util.Arrays; import java.util.Random; /** * @ClassName TestDemo3
Java快速排序演算法的實現
高快省的排序演算法 有沒有既不浪費空間又可以快一點的排序演算法呢?那就是“快速排序”啦!光聽這個名字是不是就覺得很高階呢。 假設我們現在對“6 1 2 7 9 3 4 5 10 8”這
快速排序法為什麼一定要從右邊開始
while(arr[j]>=temp&&i<j){ j--; } while(arr[i]<=temp&&i<j){ i++; } 這裡兩個while的順序是不能改變的,想一想: 假設對如下進行排
php四種基礎演算法:冒泡,選擇,插入和快速排序法 程式碼練習
function maopao($arr,$len) { for($i=1;$i<$len;$i++) { for($j=0;$j<$len-$i;$j++) { if($arr[$j]>$arr[$j+1])
快速排序法 拉格朗日插值法 二分法
快速排序法(泛型) static void Main(string[] args) { Console.WriteLine("請輸入待排序數列(以\",\"分割):"); string _s = Console.ReadLine(); string[] _
快速排序法(一)
https ffffff roc 技術分享 快速 nag 習慣 ado follow 由於作者不習慣該編輯器,只是貼出上本文的截圖,詳見:https://www.yuque.com/docs/share/33cb075a-ce6e-45f3-8de0-0ea0f749d1
快速排序法(二)
term log -o mar 技術 href ges ima process 由於作者不習慣該編輯器,只是貼出上本文的截圖,詳見:https://www.yuque.com/docs/share/3592da47-f9a5-4837-b2f6-1b553fcd8e3e快
Java 快速排序 整理知識點
1.什麼是排序? 排序是按照某種順序(升序或者降序)排列序列元素的一種演算法。 2.為什麼需要排序? 排序是電腦科學中的重要演算法,排序有時候可以顯著降低問題的複雜度,可以使用排序作為減少查詢複雜度的一種技術。鑑於排序的重要性,已有針對排序演算法的大量研究並將其
Java 快速排序 看著一片就夠了
樓主在複習快速排序的時候發現了很多問題,其中也參照了大神的程式碼,進行了程式碼的詳細說明 大神程式碼地址,有很好的圖例說明 請點選 我的程式碼實現 package sort; public class QuickSort { /**
快速排序法(golang實現)
快速排序是由東尼·霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n
Java 歸併排序法
一、原理簡介 歸併排序又稱合併排序,即針對兩個已經排序好的陣列,將其合併為一個排序陣列。歸併過程中,依次比較兩個陣列中的元素,將較小值(假設為升序排序)放入新陣列中,最終遍歷完兩個陣列後完成排序。 歸併排序是一種速度較快的排序方法。 二、時間複雜度 當我們合併 兩