快速排序(QuickSort) 陣列

2021-08-19 03:39:06 字數 745 閱讀 2477

#對於快速排序的具體介紹就不用贅述了。這裡記錄幾點要點。

設定l0,r0為需排序陣列的起點終點,l,r為檢查到達的位置。

選取陣列的首端(l0)或者尾端(r0)元素為基準元素q,如果是l0則從r0開始往前檢查,r0則從l0開始往後檢查,很顯然,這樣的話基準元素q始終位於l或者r位置,最後排序完成時,r=l=q的位置。

快速排序是一種就地排序(就地排序就按照字面意思理解即可),l前的和r後的位置是已經檢查排序完了的。這也是為什麼一直交換r,l就可以排序完成的原因,這樣交換可以不去創造新的空間。

時間複雜度最壞情況o(n^2),期望情況o(nlgn)。

#**實現:

int num; //排序的陣列num

//交換num[l],num[r]

void swap(int l,int r)

//降序排序

void qs(int l,int r)

//分治(遞迴)

if(r>l0)

qs(l0,r-1);

if(l#函式庫

快速排序函式

qsort(void*begin,int num,int width,int (*f)(const void*a,const void*b));包含在stdlib.h中

begin為排序開始位址,num為需排序元素個數,width為每個元素的大小,f為指向比較函式的指標(比較函式通常自己寫,qsort();得到返回值,return 負; 表示ab)

快速排序 QuickSort

快速排序通常用於排序的最佳的使用選擇,其期望執行時間為 o nlgn 能夠進行就地排序。最壞執行時間為 o n 2 演算法描述 分解 divide 陣列 a beg end 被劃分為兩個子陣列 a beg mid 1 和a mid 1 end 使得a beg mid 1 中的資料都小於 a mid ...

快速排序 quicksort

快速排序 quicksort 是分治法的典型例子,它的主要思想是將乙個待排序的陣列以陣列的某乙個元素x為軸,使這個軸的左側元素都比x大,而右側元素都比x小 從大到小排序 然後以這個x在變換後陣列的位置i分為左右兩個子陣列,再分別進行快速排序,直到子陣列中只有乙個元素為止。快速排序演算法如下 void...

快速排序 QuickSort

1,void quicksort int a,int low,int high 這個函式是排序的遞迴部分,mid就是已經確定的基準元素的位置。2,int partition int a,int low,int high 這個函式幹了兩件事 1 挑出來乙個基準元素 這裡選的是最後乙個作為基準 找它的正...