二分查詢與二叉排序樹 3 31號

2021-10-04 14:09:43 字數 1596 閱讀 9861

1.二分查詢

bool

binary_search

(std::vector<

int>

&nums,

int key)

else

if(key < nums[mid]

)else

}return

false

;}

2 搜尋插入位置

/**

* 搜尋插入位置,輸出該元素在有序陣列中的位置,如果沒有,輸出該插入的位置,不存在時,主要考慮兩個問題,

* nums[mid] < key < nums[mid+1] || nums[mid] < key && mid == nums.size() -1(到邊界了),此時位置? mid +1

* nums[mid] > key > nums[mid-1] || nums[mid] > key && mid == 0(到邊界了),此時位置?mid

* */

intgetpos

( std::vector<

int>

&nums,

int key)

else

if(nums[mid]

> key)

end = mid -1;

}else

begin = mid +1;

}}return index;

}

1 查詢旋轉陣列中最小的數字

/**

* 查詢旋轉陣列中最小的數,主要是看 end與begin差值唯一的時候,end 就是 index,

* 否則看實在左邊還是右邊,把 mid 複製給 begin或者 end

* */int

findmin

(vector<

int>

& nums)

int mid =

(end + begin)

>>1;

if(nums[mid]

<= nums[end]

)else

if(nums[mid]

>= nums[begin])}

return nums[mid]

;}

2 在旋轉陣列中查詢某個數字

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。

( 例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。

搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 -1 。

/**

* 旋轉陣列中查詢乙個數,看是在左邊還是在右邊哪邊有序,然後再看是不是順序的子串行

*/int

search

(vector<

int>

& nums,

int target)

//右邊有序

if(nums[mid]

< nums[end]

)else

}else

else}}

return index;

}

查詢 二叉排序樹

順序查詢 順序查詢又叫線性查詢,是最基本的查詢技術,它的查詢過程是 從表中第乙個記錄開始,逐個進行記錄的關鍵字和給定值比較,若某個記錄的關鍵字和給定值相等,則查詢成功,找到所查的記錄 如果知道最後乙個記錄,其關鍵字和給定值比較都不等時,則表中沒有所查的記錄,查詢不成功。順序查詢演算法實現 如下 順序...

查詢 二叉排序樹

動態查詢表 表結構本身是在查詢過程中動態生成的,即對於給定值key,若表中存在其關鍵值等於key的記錄,則查詢成功返回,否則插入關鍵字等於key的記錄。二叉排序樹或者是一顆空樹,或者是具有下列性質的二叉樹 1 若他的左子樹不為空,則左子樹上所有結點的值均小於它的根結點的值。2 若它的右子樹不空,則右...

Codeup二叉查詢樹 二叉排序樹

輸入一系列整數,建立二叉排序數,並進行前序,中序,後序遍歷。輸入第一行包括乙個整數n 1 n 100 接下來的一行包括n個整數。可能有多組測試資料,對於每組資料,將題目所給資料建立乙個二叉排序樹,並對二叉排序樹進行前序 中序和後序遍歷。每種遍歷結果輸出一行。每行最後乙個資料之後有乙個空格。12 2 ...