快速排序演算法是一種劃分交換的方法,它採用分治法進行排序。其基本思想是:設要排序的
陣列是a[0]……a[n-1],首先任意選取乙個資料(通常選用陣列的第乙個數)作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的
排序演算法
,也就是說,多個相同的值的相對位置也許會在演算法結束時產生變動。
一趟快速排序的演算法是:
1)設定兩個變數i、j,
排序開始的時候:i=0,j=n-1;
2)以第乙個陣列元素作為關鍵資料,賦值給key,即key=a[0];
3)從j開始向前搜尋,即由後開始向前搜尋(j--),找到第乙個小於key的值a[j],將a[j]和a[i]互換;
4)從i開始向後搜尋,即由前開始向後搜尋(i++),找到第乙個大於key的a[i],將a[i]和a[j]互換;
5)重複第3、4步,直到i=j; (3,4步中,沒找到符合條件的值,即3中a[j]不小於key,4中a[i]不大於key的時候改變j、i的值,使得j=j-1,i=i+1,直至找到為止。找到符合條件的值,進行交換的時候i, j指標位置不變。另外,i==j這一過程一定正好是i+或j-完成的時候,此時令迴圈結束)。
程式:
void quicksort(int* a, int n){
if(n<1) return;
int l = 0;
int r = n-1;
while(l
void qucksort(int* a, int n){
if(n<1) return;
int l = 0;
int r = n-1;
int m = a[l];//中間值
while(l
基本排序之快速排序
快速排序分為經典快速排序和隨機快速排序,因為經典快速排序在工程上使用比較少,因此本文只將隨機快速排序,它可以看作是經典快速排序的公升級版本。快速排序 概述 1 先生成乙個隨機數,作為下標,此下標對應的元素作為劃分值。2 將劃分值與元素末尾的數值進行交換,讓劃分值處於末尾。3 然後用partition...
基本排序演算法之3 快速排序quicksort
快排的思路就不說了,中軸分組,借助乙個臨時單元。時間複雜度o nlogn 下面是實現 includeusing namespace std templatebool less t a,t b a first temp qsort a,first,f qsort a last 1,n last 1,f...
排序演算法之快速排序
快速排序使用分治法 divide and conquer 策略來把乙個序列 list 分為兩個子串行 sub lists 步驟為 從數列中挑出乙個元素,稱為 基準 pivot 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分割槽退出...