1. 程式人生 > >快排(QuickSort)的java語言的實現

快排(QuickSort)的java語言的實現

快速排序

快排的思想與前面所介紹的歸併排序的思想類似,也是採用了分治法
演算法思想如下:

  • 第一步:分解,陣列arr[l..r]別分為兩個子陣列arr[l..q-1]和arr[q+1..r],使得前面一個數組的元素小於等於arr[q],後面一個子陣列的元素全部大於arr[q];
  • 第二步:解決,通過遞迴呼叫快速排序,對兩個子陣列進行排序
  • 第三步:合併,因為子陣列都是原址排序的,所以是不需要合併操作的。

java實現的程式碼如下:

package org.wrh.algorithmimplements;

import java.util.Arrays;
import
java.util.Scanner; //快速排序的實現 public class QuickSort { public static void main(String[] args) { //int []a={5,8,6,4,6,7,9,2,4,1,3,6,5,7}; /** * 從控制檯輸入一個數組 */ int [] a=new int[10]; Scanner sc=new Scanner(System.in); for(int i=0;i<a.length;i++){ System.out.println("請輸入一個數:"
); a[i]=sc.nextInt(); } System.out.println("快速排序之前的陣列如下:"+Arrays.toString(a)); quickSort(a,0,a.length-1); System.out.println("快速排序之後的陣列如下:"+Arrays.toString(a)); } public static void quickSort(int arr[],int l,int r){ int q; if(l<r){ /* * 得到主元元素的位置下標 * */
q=partition(arr,l,r); quickSort(arr,l,q-1); quickSort(arr,q+1,r); } } public static int partition(int []arr,int l,int r){ //選取第一個元素作為主元,也可以選取任意位置的元素作為主元 int x=arr[l]; int i=l; for(int j=l+1;j<=r;j++){ /* * 小於等於主元的陣列元素放在主元元素的左邊,其他的放在右邊 * */ if(arr[j]<=x){ i++; swap(arr,i,j); } } swap(arr,i,l); return i; } public static void swap(int [] arr,int m,int n){ int temp=arr[m]; arr[m]=arr[n]; arr[n]=temp; } }

程式碼實現的比較簡單,這裡就不詳細的講解了。

總結

  • 快速排序通常是實際排序應用中最好的選擇,因為他的平均效能是最好的:他的期望複雜度是O(nlogn);
  • 但最差的情況的時間複雜度是O(n^2)

關於更多的快速排序以及快速排序的C語言實現,你可以點選這裡