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 ...