快速排序的平均時間複雜度是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就是陣列的長度。但是經常有時是,不需要將所有...