程式設計師成長之旅 二分查詢

2021-09-24 21:14:39 字數 1486 閱讀 3924

最終**

溢位問題
在迴圈體中,一般計算中間值middle時所用的是:

middle=

(left+right)/2

;

但是這種情況容易溢位,因為一旦left+right超過所在型別的範圍的話,就會出現錯誤,為了不出現這種問題,我們引入了:

middle=left+(right-left)/2

;

邊界問題

迴圈體外的初始化條件,與迴圈體內的迭代步驟, 都必須遵守一致的區間規則,也就是說,如果迴圈體初始化時,是以左閉右開區間為邊界的,那麼迴圈體內部的迭代也應該如此.如果兩者不一致,會造成程式的錯誤。

左閉右開區間類似[left,right)

while

(left < right)

else

if(list[middle]

> target)

else

if(list[middle]

< target)

}

左閉右閉區間[left,right]

while

(left <= right)

else

if(list[middle]

> target)

else

if(list[middle]

< target)

}

#define _crt_secure_no_warnings 1

#include

#include

intbinary_search

(int

* list,

int len,

int target)

else

if(list[middle]

> target)

else

if(list[middle]

< target)

}printf

("未找到該值!");

程式設計師成長之旅 二分查詢時間與空間複雜度

空間複雜度 非遞迴int binary search int list,int len,int target else if list middle target else if list middle target printf 未找到該值 return 1 遞迴while left right ...

程式設計師成長之旅 順序表

執行效果 靜態順序表是只適用於我們已經了解到需要存多少資料,而一般我們都是用動態順序表,下面我給大家展示一下我所實現的動態順序表的 seqlist.h define crt secure no warnings 1 pragma once include include include includ...

程式設計師成長之旅 設計迴圈佇列

設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於 fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為 環形緩衝器 迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是...