算法介紹java
快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:經過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的全部數據都比另一部分的全部數據都要小,而後再按此方法對這兩部分數據分別進行快速排序,整個排序過程能夠遞歸進行,以此達到整個數據變成有序序列。算法
算法描述數組
快速排序使用分治法來把一個串(list)分爲兩個子串(sub-lists)。具體算法描述以下:ui
步驟1:從數列中挑出一個元素,稱爲 「基準」(pivot );
步驟2:從新排序數列,全部元素比基準值小的擺放在基準前面,全部元素比基準值大的擺在基準的後面(相同的數能夠到任一邊)。在這個分區退出以後,該基準就處於數列的中間位置。這個稱爲分區(partition)操做;
步驟3:遞歸地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。code
算法實現blog
public void quickSort(int[] num, int left, int right) { //若是left等於right,即數組只有一個元素,直接返回 if(left>=right) { return; } //設置最左邊的元素爲基準值 int key=num[left]; //數組中比key小的放在左邊,比key大的放在右邊,key值下標爲i int i=left; int j=right; while(i<j){ //j向左移,直到遇到比key小的值 while(num[j]>=key && i<j){ j--; } //i向右移,直到遇到比key大的值 while(num[i]<=key && i<j){ i++; } //i和j指向的元素交換 if(i<j){ int temp=num[i]; num[i]=num[j]; num[j]=temp; } } num[left]=num[i]; num[i]=key; quickSort(num,left,i-1); quickSort(num,i+1,right); }
算法分析排序
時間複雜度度O(nlogn),空間複雜度(logn)。遞歸
不穩定排序(例a與b值相同,可是在比較後有可能會發生位置變化)內存
內排序(全部排序操做都在內存中完成)it