最壞情況下保證時間複雜度為N logN的快速排序

2021-08-03 08:44:03 字數 1210 閱讀 7461

快速排序的平均時間複雜度是n*logn,同時其也是實踐已知的最快的通用排序演算法,但是其最壞情況的時間複雜度依然是n的平方,但是只要我們對快速排序演算法稍作修改,就可以保證其最壞情況的時間複雜度也是n*logn。

思路就是在遞迴達到一定深度後,將快速排序的遞迴呼叫改為堆排序,下面是我實現的**,我將遞迴深度設定為

2*ln(n),這個值也是很多演算法書籍推薦的值。

#include #include #include #include #include #include #include #include #include #include inline int left_child(int rt) 

void percolate_down(int *a,int rt,int sz)

a[rt] = tmp;

return;

}void hsort(int *a,int sz)

return;

}void ssort3(int *a,int s, int e)

int elect_pivot(int *a,int s,int e)

void qsort(int *a,int s,int e,int depth)

int i = s;

int j = e;

int p = elect_pivot(a,s,e);

while(true)

std::swap(a[i],a[e]);

if(depth > 0)

else

return;

}void qsort(int *a,int sz)

int da(int *a,int n)

std::cout << std::endl;

return 0;

}int gen(int *a,int n)

return 0;

}bool chk(int *a,int n)

int main(int argc,char *argv)

int loop = atoi(argv[1]);

int n = 10;

if(argc == 3)

n = atoi(argv[2]);

int *a = new int [n];

while(--loop >= 0)

delete a;

return 0;

}

最好,最壞和平均時間複雜度

在查詢成功的情況下,若待查詢的資料元素恰好是陣列的第乙個元素,則只需比較一次即可找到,這就是最好情況,t n o 1 稱最好時間複雜度。若是最後乙個元素,則要比較n次才能找到。t n o n 稱最壞時間複雜度。在查詢不成功的情況下,無論何時進行不成功的查詢都需要進行n次比較,t n o n 成功查詢...

時間複雜度分析 最好 最壞 均攤

array 陣列.n array長度.x 需要查詢的值 int searchposition int array,int n,int x return pos 根據上面的演算法來說的話,如果我x的位置在array 0 那麼時間複雜度就是o 1 如果x的位置在array n 1 或者不在array中....

最好,最壞,平均時間複雜度分析

例子1public static intfind int array,int n,int x return pos 分析例子1的時間複雜度 例1的主要實現在for迴圈中的array i 上。他的時間複雜度就是來自for迴圈 所以他的時間複雜度就是o n n就是陣列的長度。但是經常有時是,不需要將所有...