《資料結構與演算法分析(c描述》 快速排序

2021-07-10 04:11:15 字數 1513 閱讀 9630

快速排序是最快的已知排序演算法,平均執行時間為 o(nlogn) ,最壞情況的效能為 o(n^2)。

將陣列 s 快速排序由下列簡單的四步組成:

如果 s 中元素個素是0或1,則返回

取 s 中任一元素作為樞紐元

將 s - (s 中其餘元素)分成兩個不相交的集合,s1 中元素小於 v,s2 中元素大於 v

對 s1、s2遞迴呼叫

c **實現如下:

void qsort(int a, int low, int high)

int first = low;

int last = high;

int key = a[first];/*用字表的第乙個記錄作為樞軸*/

while(first < last)

a[first] = a[last];/*將比第乙個小的移到低端*/

while(first < last && a[first] <= key)

a[last] = a[first];

/*將比第乙個大的移到高階*/

}a[first] = key;/*樞軸記錄到位*/

qsort(a, low, first-1);

qsort(a, first+1, high);

}

快速排序乙個典型的變形應用是用在選擇問題(select problem)上,即從乙個陣列中選擇第 k 小元素。

快速演算法選擇的步驟如下:

如果 s 中元素個素是0或1,則返回

取 s 中任一元素作為樞紐元

將 s - (s 中其餘元素)分成兩個不相交的集合,s1 中元素小於 v,s2 中元素大於 v

設|s1|的值為 cur,如果k <= cur, 遞迴呼叫qselect(a, cur - k, low, k - 1)否則遞迴呼叫qselect(a, k - cur, k + 1, high)

c **實現:

if (low >= high)

return;

int first = low;

int last = high;

int key = a[low];

while(first

< last)

a[first] = key;

if (k <= first)

qselect(a, first - k, low, first - 1);

else

if(k > first)

qselect(a, k - first, first + 1, high);

}int main() ;

qselect(a, n, 0, 9);

printf("qselect : %d\n", a[n - 1]);

for (int i = 0; i < 10 ; i++)

printf("%d#", a[i]);

printf("\n");

return0;}

資料結構與演算法分析 C語言描述

第一種方法,先進行排序,再返回位置k上的元素。簡單排序問題 第二種方法,先將前k個元素讀入,再將剩下的元素逐個讀入,如果新元素大於陣列中第k個元素就找到他合適的位置並將陣列中的乙個元素擠出。第三種方法,利用快排的特點 假設預設公升序排序 每一次快排操作都能確定乙個數在排序結果中的最終固定位置,即該位...

資料結構與演算法分析 c 語言描述

編寫帶有下列宣告的兩個例程 void permute string str void permute char str,int low,int high 第乙個例程是個驅動程式,它呼叫第二個例程並顯示string str中字元的所有排列。例如,str是 abc 那麼輸出的串則是abc,acb,bac...

《資料結構與演算法分析(C 語言描述)》

第1章 uml教程 更多軟體恐怖故事 nist新聞稿 軟體錯誤每年給美國經濟造成595億美元的損失 nist報告本身 pdf 第2章 ieee對實數的反感 c 的按位運算子 第3章 工會 記憶體結構 第5章模式匹配 資料加密 第9章用位集實現集 有關valarrays的更多資訊 第10章 用於解析表...