1. 二分查詢
(1) 有序陣列查詢插入位置: 主要是終止條件的判斷,如果查詢不到需要被範圍的插入位置為begin
public:int searchinsert(vector& nums, inttarget)
private:
int binarysearch(vector& nums, int target, int begin, intend)
int mid = (begin + end) / 2;
if (target == nums[mid]) returnmid;
else if (target else
}
(2) rotated array 尋找最小值
第一種情況: 不包含重複數字,
classsolutionprivate:
int bsearch(const vectornums, int s, inte)
};
(3) rotated array 尋找某個值,允許重複:
分成三種情況,(1) 是遞增陣列 (2) num[s] == num[mid] = nums[e] 用o(n)的時間順序查詢
(3)兩段陣列的型別, 二分查詢,先判斷mid是在哪一段陣列上
classsolutionprivate:
bool bsearch(const vector& nums, int target, int s, inte)
if(cornercase(nums, s, e))
if (nums[s] >=nums[e])
if (nums[mid] < nums[s])
}return false;
}bool cornercase(const vector& nums, int s, inte)
if (nums[s] <= nums[e] && nums[mid] >=nums[s])
return false;
}bool asearch(const vector& nums, int target, int s, inte)
return false;
}};
排序演算法 二分查詢
1氣泡排序 相鄰比較,大的放右邊,最大值在索引最大處 for int i 0 ilength 1 i 2.選擇排序 第乙個元素拿出來,與該元素右邊的元素按順序比較,小的元素放左邊,第一比較結束,最小索引出現最小值 第二個元素拿出來,重複第一元素的步驟。for int i 0 ilength 1 i ...
排序演算法學習整理拓展(二分查詢)
說到查詢演算法,最簡單最暴力的演算法就是乙個個比較,確定是否為所需要的值。例如,0,1,2,3,4,5,6,7,8,9 十個數中查詢是否存在數 x 那麼暴力的方式就是 1.取出第乙個數 0 與 x 比較,若相等則返回索引 2.取出第二個數 1 與 x 比較,若相等則返回索引 3.取出第三個數 2 與...
排序演算法學習整理拓展(二分查詢)
說到查詢演算法,最簡單最暴力的演算法就是乙個個比較,確定是否為所需要的值。例如,0,1,2,3,4,5,6,7,8,9 十個數中查詢是否存在數 x 那麼暴力的方式就是 1.取出第乙個數 0 與 x 比較,若相等則返回索引 2.取出第二個數 1 與 x 比較,若相等則返回索引 3.取出第三個數 2 與...