當輸入資料已經「幾乎有序」時,插入排序速度很快。在實際應用中,我們可以利用這一特點來提高快速排序的速度。當對乙個長度小於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部分.保持所有陣列處在這種狀態,最終完成排序.這些思想,還沒有掌握.加油吧,我還能說什麼?說些這個,呵呵.這段 起初不懂.後來,隨著不斷手工模擬,發現,採用了很多技巧.也難...