快速排序
快排的平均效率總的來說是最快的排序演算法,但是他也有那種最壞的情況。比如說一組陣列然後要排成順序,那麼他的時間複雜度就成了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...