二分查詢演算法為什麼要先排序

2022-02-23 15:07:33 字數 749 閱讀 4892

其實二分查詢演算法就和我們在乙個英文本典中找乙個單詞一樣,比如要找middle這個單詞,先把字典翻到大概中間的位置,那麼現在字典就被分成兩個部分了,middle這個單詞要麼在第乙個部分,要麼在第二個部分,如果正好翻到p那一頁,那麼說明middle在前面的那個部分,再從前面那個部分找乙個大概中間的位置,用不了多長時間就找到middle了。 我們查字典的這個方法就是二分查詢演算法,但是前提是字典是排好序的,如果字典是亂序的,那麼就沒法用 二分查詢演算法了。

仔細想來,插入演算法也可以用類似二分查詢演算法的思路來操作,一般插入演算法的前提肯定是已經排好序了,用二分插入演算法效率很高。

從二分查詢演算法實現來看,它實際上是在降低候選資料規模的一種思路。

如果用最簡單的乙個乙個查詢,那麼n個資料第一次查詢的時候候選資料規模是n,第二次查詢的時候候選資料規模是n-1。。。

每次資料規模減1.

如果二分查詢的話,那麼n個資料第一次 查詢的時候候選資料規模是n,第二次查詢的時候候選資料規模是n/2,第三次查詢的時候資料規模是n/4。

可以看到二分查詢演算法降低資料規模的作用十分明顯。

雜湊演算法也是一種查詢演算法,它的意思是先給候選資料建立索引,然後按照索引和候選資料一一對應的關係存起來,查詢的時候是先把待查詢資料用雜湊函式算出索引值,然後就找到了候選資料了。處理問題的思路其實是一種把無序資料變得「有序」,

這個有序就是建立索引的過程,是一種預處理的思路,你讓我查詢資料,我先不找,先把資料擺弄擺弄,擺弄好了再找。我並不是很贊同書上說的雜湊演算法是一種空間換時間的演算法,感覺沒有說道點子上啊。

排序演算法 二分查詢

1氣泡排序 相鄰比較,大的放右邊,最大值在索引最大處 for int i 0 ilength 1 i 2.選擇排序 第乙個元素拿出來,與該元素右邊的元素按順序比較,小的元素放左邊,第一比較結束,最小索引出現最小值 第二個元素拿出來,重複第一元素的步驟。for int i 0 ilength 1 i ...

二分查詢排序

static final int n 15 static void quicksort int arr,int left,int right 快速排序演算法 if ltemp rtemp ltemp if leftx high mid 1 else low mid 1 return 1 未找到 pu...

排序 二分查詢

實現歸併排序 快速排序 插入排序 氣泡排序 選擇排序 堆排序 選做 完成leetcode上的返回滑動視窗中的最大值 239 這是上一期第三天的任務進行保留 涉及佇列可以對第二天進行整理複習 程式設計實現 o n 時間複雜度內找到一組資料的第 k 大元素 def insert sort alist n...