快速排序
看別人寫的快排程式,看了很久才看懂。於是搜了很多文章學習一下
乙個是匈牙利的舞蹈:
乙個是c語言實現的快排:
還推薦一篇視覺化的演算法: (推薦先看這個)
基本的思想估計大家都有了解了,就是:從待排序序列中找到乙個關鍵字(預設為第乙個元素) 然後將比關鍵字少的資料排列在左邊,大於關鍵字的排在右邊,然後對關鍵字左右兩邊的序列繼續上面步驟,直至關鍵字兩邊的序列都已經排好序。
我一開始按著有些人將最左邊的數作為支點pivot,看得很暈。所以我推薦大家先從將支點設為中間,實現了以後再模擬去理解將支點設為最左邊的情況。
大致的過程就是首先有左右兩個指標,不停的向中間支點移動,如果左指標找到比pivot大的並且右指標找到pivot小的,就將兩個指標位置的數交換,交換完繼續向pivot移動。我們先把這段**實現:
public static void quicksort(int numbers,int low,int high)
if(i<=j)
}
直到一種情況出現,就是左指標到了右指標的右邊,也就是i一趟快排。以此迴圈往復就是我們所謂的遞迴:我們在上面的**加入遞迴部分
public static void quicksort(int numbers,int low,int high)
if(i<=j)
}if(j>low)
if(i然後主函式設定乙個陣列測試一下就可以了,你可以按著我的思路自己敲一遍就理解了。
public static void main(string args) ;
quicksort(numbers,0,8);
for(int a:numbers)
system.out.print(a+" ");
}
結果如下
排序演算法 快速排序 java實現
它採用了一種分治的策略,通常稱為分治法。分治法思想 將原問題分解為若干個規模更小但結構與原問題相似的子問題。遞迴地解這些子問題,然後將這些子問題的解組合為原問題的解。對於陣列a,隨機選擇乙個元素作為基準數pos,一般為第乙個元素或最後乙個元素。將該陣列分為兩堆a 0,pos index 1 和 a ...
Java實現快速排序演算法
一 演算法描述 快速排序是對氣泡排序的一種改進。在氣泡排序中,記錄每次都是與相鄰位置上的資料作比較,因此每次只能移動乙個位置。而在快速排序中,記錄的比較和移動都是從兩端向中間進行的。其主要思想 首先在待排序陣列中選取乙個基準值 作為比較物件 然後利用基準值將待排陣列分成2個部分。基準值左邊的陣列的資...
java實現快速排序演算法
快速排序是應用很廣泛的排序演算法。主要原因是它實現簡單 適用於各種不同的輸入資料且在一般應用中比其他排序演算法都要快得多。快速排序主要思想就是當兩個子陣列都有序時整個陣列也就自然有序了。而這個過程就是先選出乙個基準數,一般都選第乙個,然後基準數的左邊都是小於基準數的,基準數的右邊都是大於基準數的。然...