Java排序之快速排序 2

2021-06-22 19:32:01 字數 1318 閱讀 7838

快速排序

快排的平均效率總的來說是最快的排序演算法,但是他也有那種最壞的情況。比如說一組陣列然後要排成順序,那麼他的時間複雜度就成了o(n^2)當然這個是最壞情況不會經常遇到,但是我們總要了解下。

好了 然後接下來是我個人對快排的一些簡單總結:

在快排(quicksort)中,我們一般會選出乙個中軸(通常情況下我們選擇陣列的第一位中軸),然後在陣列裡面進行遍歷,把比中軸小的數扔到中軸的前面,比中軸大的數扔到中軸後面,然後根據中軸,我們又分出來兩個陣列!(中軸以前的數,中軸以後的數,中軸已經排好序了,位置肯定不會變了,可不用管,然後一直遞迴呼叫排序,直到每乙個陣列都為1的長度)

描述也許有點迷糊,那讓我們看下example:

給一組陣列sum=  

我們給陣列的中軸定為 第乙個 2,定義個low指標指向陣列第乙個數2,定義乙個high 指標指向陣列最後乙個數5,

2 4 9 3 6 7 1 5  第一步我們從high指向的數字開始,與中軸2比較,5 > 2 滿足,不用變,然後high--

2 4 9 3 6 71 5  現在high指向1,然後1> 中軸2 不滿足,然後把1往前扔,sum[ low ]=sum[ high ]

1 4 9 3 6 7 1 5  然後low+1 開始與中軸數 2比較,4 < 2,不滿足,然後得扔到2的後面去  ,所以 sum[high] = sum[low]        這裡的low已經是low+1 就是給sum[high] 的位置賦值4

1 4 9 3 6 7 4 5 重複第二步,第三步。比較2和7,2和6,2和3,2和9,全部大於2,滿足條件,因此不變  所以次數low==high 指向 陣列的第二個數

最後一步,把sum[low] = mid  也就是中軸2 ,這樣一次遍歷就結束了,比2大的都在2的後面,比2小的都在2的前面。

現在讓我們用**來實現下吧

public class quicklysort 

num[low] = num [high];

while(low < high && num[low] < temp)

num[high] = num[low];

} num [low] = temp;

return low; }

public void quicksort(int num,int low,int high) }

public void sort(int num) }

@test

public void dosort();

sort(num);

for (int i = 0; i < num.length; i++)

}

排序之快速排序(2)

這種快速排序的思路是 首先以a start 為軸,不停得從陣列的兩端開始比較。從最右端開始,如果有比a start 小的,那麼賦值a i 從最左端開始,如果有比a start 大的,那麼賦值a j 以此往復,漸漸有序 注意的是遞迴跳出的條件,只有乙個數就不需要排序,即start end includ...

java之快速排序

快速排序利用分治法的思想,先設定乙個基準 通常可以設定陣列的第乙個元素為基準 通過一趟快速排序使得左邊的資料比基準都要小,右邊的資料比基準都要大。然後利用相同的思想分別對左邊和右邊的資料進行快排,從而達到有序。一趟快速排序的思想的是 給定乙個陣列array,初始時以陣列的第乙個元素作為基準,先從右往...

Java排序演算法之快速排序

首先在陣列中選擇乙個基準點 該基準點的選取可能影響快速排序的效率,後面講解選取的方法 然後分別從陣列的兩端掃瞄陣列,設兩個指示標誌 lo指向起始位置,hi指向末尾 首先從後半部分開始,如果發現有元素比該基準點的值小,就交換lo和hi位置的值,然後從前半部分開始掃秒,發現有元素大於基準點的值,就交換l...