java排序算法——快速排序

說到排序算法,就不得不說優雅而簡練的一種算法——快速排序算法。

快速排序是當前使用率最多,效率最高,速度最快的一種排序算法。

作爲排序算法界的扛把子,快速排序算法無疑是程序員首選的一種排序算法。


首先選擇一個數據作爲基準,然後再讓基準數和其他數據進行對比。

先讓基準數從數組的右邊依次遍歷,直到找到小於基準數數值的數,並將該數與基準數相互交換位置

再讓基準數從數組的左邊依次遍歷,直到找到大於基準數數值的數,並將該數與基準數相互交換位置

循環以上步驟,當以上的步驟執行完畢之後,就確定的基準數的位置。

然後將數組以基準值爲基準劃分爲左右兩個區域

基準值左邊的區域中的數值比基準值小,基準值右邊的區域中的數值比基準值大。

然後將左區和右區以同樣的方式進行判斷和換位。

好了,廢話不多說,小的給各位看官上代碼。

public static int quicksort(int[] array,int lo,int hi){       //傳入數組和索引,lo = [0] ,hi = [array.length() - 1]

int key = array[lo];                                                //定義變量,爲變量賦值爲第一個數

                 //判斷 如果數組中不是隻有一個數據,則需要進行排序

while( lo < hi){                     

            //判斷如果最後的數據大於或者等於基準值則將最大索引依次遞減,直到找到比基準值小的數                                 

while(lo < hi&& array[hi] >= key){                   

                                   hi--;                                                       

}

         //如果找到符合條件的數值,則將基準值和當前值相互換位

array[lo] = array[hi];                                     

            //判斷如果第一個數據小於或等於基準值則將最小索引依次遞 增,直到找到比基準值大的數

while(lo < hi&&array[lo] <= key){          

lo++;                                                        

}

             //如果找到符合條件的數值,則將基準值和當前值相互換位

array[hi] = array[lo];                                   

}

array[hi] = key;                                         //將基準值記錄到尾

return hi;                                                   //返回基準值索引

}

public static void sort(int[] array,int lo,int hi){        

if(lo >= hi){
return;
}
int index = quicksort(array,lo,hi);                //調用方法,接收基準值
sort(array,lo,index-1);                                  //左區遞歸調用
sort(array,index+1,hi);                                 //右區遞歸調用


    





    可以配合排序算法使用的二分查找法

    以上是本人對於快速排序的理解

    如有不妥之處,請各位大佬指出

   謝謝