首先說一下什麼是快排,比冒泡效率要高,快排的基本思路是首先找到乙個基準元素,比如陣列中最左邊的那個位置,作為基準元素key,之後在最左邊和最右邊設立兩個哨兵,i
和j
之後,開始按住左哨兵(i),讓右哨兵(j)往左走(j--),找到比key小的元素後,按住右哨兵(j),開始讓左哨兵往右走(i++),直到找到比key大的元素,讓i和j腳下的值互換,此時完成第一趟快排,之後開始按照這個思路進行while迴圈,跳出迴圈的條件很簡單,就是當兩個哨兵碰頭了,就跳出迴圈,此時,左邊一塊永遠比key小,右邊一塊始終比key大!然後來個遞迴,對左右這兩塊進行一次快排,就o了。
package com.rsc.sort;
/** * 人生中第乙個快排
* * @author
* @落雨
*/public class quicksort
int key = a[l]; // 基準位key
while (i != j) {
// 先從右邊的哨兵開始找
while (i < j && a[j] >= key) {
j--; // 直到找到了 a[j]
列印結果如下:
基準位:2基準位:1
1 2 5 4 3 7 6
基準位:5
基準位:3
基準位:4
1 2 3 4 5 7 6
1 2 3 4 5 7 6
基準位:7
基準位:6
1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 2 3 4 5 6 7
演算法系列(三) 快速排序
快速排序 終於到我們人見人愛,花見花開,鳥見鳥呆,車見車爆胎 快排的好處不用多說,平均時間的nlogn o 1 的輔助空間,一般比其他的排序演算法要快得多。當然也有些不足,首先,不穩定,所以多關鍵字排序的最後一排肯定不能用了,另外,最壞情況下則為n 2 快速排序和歸併排序一樣,都屬於分治的排序方法。...
演算法系列 排序演算法(四)快速排序
快速排序是通過兩個指標相互交換完成一次快速排序,類似於遞迴的二分排序,從交換上來講比較像冒泡 為什麼這麼說呢?不管是插入還是直接,都需要在移動之前遍歷元素 冒泡直接比較交換。公升序 資料 4251 376下標 0123 4561 指標1 4 指標2 6 指標1是用來二分的標準,指標2是被二分的元素,...
演算法系列 JavaScript快速排序思想實現
快速排序離不開遞迴的思想,你如果不了解遞迴,可以結合我另外一篇文章來學習 演算法入門之遞迴分而治之思想的實現 網上有有趣的動態圖來表示快速排序,但其實我們大部分程式設計師都是腦子不太好使那種,即使看了形象生動的動態圖,還是想不到具體實現思路。排序都有基本的步驟,快排也不例外,通常分為這麼幾步 1 選...