快速排序使用分治法(divide and conquer)策略來把乙個序列(list)分為兩個子串行(sub-lists)。
步驟為:
1.從數列中挑出乙個元素,稱為 "基準"(pivot),
2.重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割之後,該基準是它的最後位置。這個稱為分割(partition)操作。
3.遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。
最壞時間複雜度: o(n^2),平均時間複雜度:o(nlogn)
快速排序是不穩定的排序演算法。
code:
#include
void swap(int *a, int *b)
int partition(int a, int p, int q)
}
swap(&a[p], &a[i]);
return i;
}
void quick_sort(int a, int p, int q)
}
int main()
, i;
int size = sizeof(a) / sizeof(int);
quick_sort(a, 0, size);
for (i = 0; i
printf("%d ", a[i]);
return 0;
}
如果我們呼叫的是quick_sort(a, 0, size - 1),那麼要做以下修改
code 16:j <= q
code 30:quick_sort(a, p, r-1)
code 31:quick_sort(a, r+1, q)
排序演算法 快速排序演算法
網際網路的大型公司還在火熱招聘中,參與了一次又一次的筆試,都不通過,我還是太菜!作為程式設計人員,需要邁過去 資料結構與演算法 這個坎,畢竟,筆試不會真的很虧,加油吧,少些水,多點實操。一 快速排序演算法思想 從一組資料中找出乙個基準值,一般是選擇中間值作為基準值,然後從左到右將值與基準值進行比較,...
演算法 排序演算法 快速排序
快速排序是對冒泡法排序的一種改進。快速排序演算法 的基本思想是 將所要進行排序的數分為左右兩個部分,其中一部分的所有資料都比另外一 部分的資料小,然後將所分得的兩部分資料進行同樣的劃分,重複執行以上的劃分操作,直 到所有要進行排序的資料變為有序為止。可能僅根據基本思想對快速排序的認識並不深,接下來以...
排序演算法 快速排序
圖示 一趟快速 排序的演算法是 1 設定兩個 變數i j,排序開始的時候 i 0,j n 1 2 以第乙個 陣列元素作為關鍵資料,賦值給key,即key a 0 3 從j開始向前搜尋,即由後開始向前搜尋 j 找到第乙個小於key的值a j a i 與a j 交換 4 從i開始向後搜尋,即由前開始向後...