快速排序優化(待完善 C語言

2021-08-30 13:43:12 字數 1259 閱讀 8239

當輸入資料已經「幾乎有序」時,插入排序速度很快。在實際應用中,我們可以利用這一特點來提高快速排序的速度。當對乙個長度小於k的子陣列呼叫快速排序時,讓它不做任何排序就返回。當上層的快速排序呼叫返回後,對整個陣列執行插入排序來完成排序過程。試證明:這一排序演算法的期望時間複雜度為o(nk+nlg(n/k))。分別從理論和實踐的角度說明我們應該如何選擇k?

此處實現的k值為手動輸入,主觀選擇的。還沒有做到合理選擇k值。

待修改:根據執行時間選擇k值。

/*

*file name:quicksort

*author:fei yuling version:2.0 date:2018.10.31

*description:快速排序的優化,當子陣列長度小於k時,什麼都不做,直到上層遞迴完後全陣列進行插入排序

*/

#include#include#define max 20

/* *函式名:print

*作用:列印陣列

*引數:len-陣列長度,arr-陣列

*返回值:無

*/ void print(int len,int arr)

else

}/*此時i=j*/

if(arr[i] >= arr[begin]) //當最終停留的數字大於等於基準時,i前移,即此數在樞紐之後

swap(&arr[begin], &arr[i]);//將基準放在樞紐位置

quicksort(arr,begin,i,k);//遞迴

quicksort(arr,j,end,k);

}} /*

*函式名:insertsort

*作用:插入排序

*引數:arr-待排陣列,n-陣列總長度

*返回值:

*/ void insertsort(int arr,int n)

arr[i+1]=key;//退出迴圈時i-1了,所以此時待排數字要放在a[i+1]的位置上 }}

int main()

printf("請輸入待排序列:");

for(i=0;i=n)

quicksort(arr,0,n-1,k);

printf("快速排序後的陣列為:\n");

print(n,arr);

insertsort(arr,n);

printf("插入排序後的陣列為:\n");

print(n,arr);

return 0;

}

優化總結 待完善

sql優化 1.變數在外部解析通常要比在sql內部解析要快 name 1 sql select from user where name name sql select from user where name name.字串優化 1.包裹字串單引號與雙引號的區別 通常來說,單引號是不解析變數的,而...

c語言中的資料型別(待完善)

內容概要 一 整形與浮點型 原碼補碼反碼 二 字元型別和 字串型別 三 常量 1 整形與浮點型 整形2位元組 short signed short int 範圍 2 15到2 15 1 unsigned short int 4位元組範圍 0到2 16 1 int signed int 範圍 2 31...

快速排序C語言

就感覺,自己對這些個排序.至少,腦袋裡還沒有.哎,我老是不專心呢.加油吧.說說快速排序吧.這東西,原理就是不斷地將乙個陣列分成3部分.保持所有陣列處在這種狀態,最終完成排序.這些思想,還沒有掌握.加油吧,我還能說什麼?說些這個,呵呵.這段 起初不懂.後來,隨著不斷手工模擬,發現,採用了很多技巧.也難...