演算法整理 二分查詢和排序

2022-08-01 20:51:14 字數 1128 閱讀 7457

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 尋找最小值

第一種情況: 不包含重複數字, 

classsolution 

private:

int bsearch(const vectornums, int s, inte)

};

(3) rotated array 尋找某個值,允許重複:

分成三種情況,(1) 是遞增陣列 (2) num[s] == num[mid] = nums[e]    用o(n)的時間順序查詢

(3)兩段陣列的型別, 二分查詢,先判斷mid是在哪一段陣列上

classsolution 

private:

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