有序表搜尋

2021-10-24 12:54:15 字數 1671 閱讀 9667

#include

#include

#include

#include

#include

#include

#pragma gcc optimize("ofast")

using

namespace std;

intrand_int

(int a,

int b)

;void

non_repeat

(int n,

int* a)

int i =0;

for(set<

int>

::iterator it = s.

begin()

; it != s.

end(

); it++)}

void

shuffle

(int n,

int* a)

}int

rand_int

(int a,

int b)

intsearch_x

(int x,

int i,

int* ptr,

int* val)

return i;

}inta(

int x,

int head,

int* ptr,

int* val)

intd

(int x,

int head,

int n,

int* ptr,

int* val)

intb

(int x,

int head,

int n,

int* ptr,

int* val)

}return

search_x

(x, i, ptr, val);}

intc

(int x,

int head,

int n,

int* ptr,

int* val)

}delete

idx;

return

search_x

(x, i, ptr, val);}

intmain()

int i = head;

int m =0;

while(1

)}cout <<

"************************"

<< endl;

while(1

)delete

a;delete

ptr;

delete

val;

return0;

}

a,b,c,d分別是最普通的演算法(o(n))、時間複雜度為n

\sqrt n

n​的確定性演算法,b的舍伍德演算法形式以及普通的隨機演算法。

下圖是一次執行結果:

可以看到,a,d的執行時間在同乙個量級,時間複雜度為o(n),b,c的執行時間遠遠小於a,d,因為b,c的時間複雜度為o(n

)。o(\sqrt n)。

o(n​)。

有序鍊錶轉換二叉搜尋樹

題目描述 給定乙個單鏈表,其中的元素按公升序排序,將其轉換為高度平衡的二叉搜尋樹。本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。思路分析 我們可以利用兩個指標來訪問鍊錶中的中間元素。當找到鍊錶中的中間元素後,我們將鍊錶從中間元素的左側斷開,做法是使用乙個...

有序鍊錶轉換二叉搜尋樹

題目描述 給定乙個單鏈表,其中的元素按公升序排序,將其轉換為高度平衡的二叉搜尋樹。本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。示例 給定的有序鍊錶 10,3,0,5,9 乙個可能的答案是 0,3,9,10,null,5 它可以表示下面這個高度平衡二叉搜...

有序鍊錶轉換二叉搜尋樹

給定乙個單鏈表,其中的元素按公升序排序,將其轉換為高度平衡的二叉搜尋樹。本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。示例 給定的有序鍊錶 10,3,0,5,9 乙個可能的答案是 0,3,9,10,null,5 它可以表示下面這個高度平衡二叉搜尋樹 0 ...