快速排序(Quick Sort)是基於二分思想,對冒泡排序的一種改進。主要想法是確立一個基數,將小於基數的數字放到基數的左邊,大於基數的數字放到基數的右邊,然後再對這兩部分數字進一步排序,從而實現對數組的排序。
其優點是效率高,時間複雜度平均為O(nlogn),顧名思義,快速排序是最快的排序演算法,耗費的資源少,最佳情況下,空間複雜度為O(logn),每一次都平分數組的情況,程式碼較為簡單。
其缺點是不穩定,初始序列有序或基本有序時,時間複雜度降為O(n^2)。
例如:
publicclassMain{//快排實作方法publicstaticvoidquickRow(int[]array,intlow,inthigh){inti,j,pivot;//結束條件if(low>=high){return;}i=low;j=high;/ /選擇的節點,這裡選擇的數組的第一數作為節點pivot=array[low];while(i<j){//從右往左找比節點小的數,循環結束要么找到了,要么i =jwhile(array[j]>=pivot&&i<j){j--;}//從左往右找比節點大的數,循環結束要么找到了,要么i=jwhile(array[i]<=pivot&&i <j){i++;}//如果i!=j說明都找到了,就交換這兩個數if(i<j){inttemp=array[i];array[i]=array[j];array [j]=temp;}}//i==j一輪循環結束,交換節點的數和相遇點的數array[low]=array[i];array[i]=pivot;//數組「分兩半”,再重複上面的操作quickRow(array,low,i-1);quickRow(array,i+1,high);}publicstaticvoidmain(String[]args){int[]array={6,17, 38,59,2,10};intlow=0,high=array.length-1;quickRow(array,low,high);for(inti:array){System.out.println(i);}}}
運行結果如下:
2610173859