數據結構與算法(5)查找

靜態查找

若查找目的是爲了查詢某個特定的數據是否在表中或檢索某個特定數據的各類屬性,則此類查找表爲靜態查找表。性能

一、順序查找

基本原理:從表一端開始逐個和關鍵字進行比較,若找到一個記錄和給定值相等,則查找成功,反之失敗。再簡單點就是,一個一個的比大小,看看是否相等。排序

例子:索引

         

順序查找更適合於順序存儲結構和鏈式存儲結構的查找表。順序查找須要一個個的去比較,效率很低。性能分析

二、折半查找(二分查找)

基本原理:1. 把序列分紅左中右三部分,左部分小於中間值,右部分大於中間值;效率

              2. 把給定值與中間值比較,肯定下次查找是在左部分仍是右部分;原理

              3. 繼續上面兩步操做,直到成功或失敗。二叉樹

注意:折半查找須要注意給定的序列必須是一個有序序列。方法

例子:im

                      

三、分塊查找

基本原理:順序查找和二分法查找的折中,先分塊,在塊中順序查找。數據

注意:分紅的各塊內部數據可能無序;各塊之間有序(第二個塊中的元素都比第一個塊中元素都大);創建了索引表,索引表按關鍵字有序。

例子:

                   

靜態查找表方法的性能分析

                  

動態查找

若再查找的過程當中同時插入查找表中不存在的數據,或從查找表中刪除已存在的某個數據,則稱此類查找表爲動態查找表。

一、二叉排序樹

定義:1. 若它的左子樹非空,則左子樹上全部的結點的值均小於根結點的值;

        2. 若它的右子樹非空,則右子樹上全部的結點的值均大於根結點的值;

        3. 左右子樹自己就是兩棵二叉排序樹。

例子:

                              

二、平衡二叉樹

定義:1. 它或者是一棵空樹

         2. 樹中任一結點的左右子樹深度相差不超過1。

注意:從定義咱們可獲得:想要一顆樹平衡,有三種狀況,節點的平衡度要麼爲0,要麼爲1,要麼爲-1。(平衡度:節點左子樹的高度減去其右子樹的高度。

例子:

                      

相關文章
相關標籤/搜索