一、演算法設計與分析:
當輸入設計已經幾乎有序時,插入排序很快,而快速排序效能卻不理想,所以當快速排序劃分序列長度小於k時,改用插入排序能提高時間效能。即當序列長度大於等於k時用正常的快速排序,小於k時用插入排序。本實驗嘗試多個k值,以找出最佳k值,使得程式執行時間最佳。二、演算法實現
#include #define maxsize 50000
#include #include using namespace std;
void print(int arr, int start, int end);
void insertsort(int arr, int p, int r);
void exchange(int arr, int i, int j);
void quicksort(int arr, int p, int r, int k);
int partion(int arr, int p, int r);
void sort(int arr, int p, int r, int k);
int main()
arr[i+1]=key; }}
void quicksort(int arr, int p, int r, int k)
}int partion(int arr, int p, int r){
int key;
int i,j;
i=p-1;
key=arr[r];
for(j=p;j
觀察實驗結果可知,當實驗資料為50000時,k=50左右,時間最優;當實驗資料為100000時,k=83左右,時間最優。經過多組測試發現。當子串行較短時採用插入排序後時間效率比一直採用快速排序有明顯提公升。
演算法導論 快速排序優化演算法!
常見快速排序 時間複雜度最好情況下o nlgn 最壞情況o n2 快速排序是基於分治模式的 分解 陣列a p.r 被劃分成兩個 可能空 子陣列a p.q 1 和a q 1.r 使得a p.q 1 中的每個元素都小於等於a q 而且,小於等於a q 1.r 中的元素。下 標q 也在返個劃分過程中迕行計...
演算法導論學習筆記(一)快速排序及優化
快排的偽 quick sort a,p,r 初始呼叫傳入的引數是quick sort a,1,a.length partition的偽 partition a,p,r 演算法維持幾個指標變數,p和r分別指向陣列的首尾元素,i為比基準元素x小的最後乙個元素,j為比基準元素大的最後乙個元素的下乙個。也就...
演算法導論之快排
快速排序法原理也是用了分治法,主要原理是將陣列a分為a p.q 1 和a q 1.r 然後調整元素使得a p.q 1 小於等於a q a q 小於等於a q 1.r 然後不斷的遞迴,到最後就排序完成。p i是小於等於x的,i 1 j 1是大於等於x的,j r是還未處理的 i每次從list前面往後走 ...