資料結構4 順序查詢與折半查詢

2021-09-29 18:28:21 字數 1582 閱讀 3875

【順序查詢(針對無序的資料,有序的資料可以用更高效的資料查詢方式)

在無序的資料查詢中, 順序查詢是最入門、最簡單的演算法,該演算法雖然簡單,但是當資料量增多時,查詢效率較低。比如在100萬資料中,平均需要查詢大約50萬次,從演算法角度來說,是很難接受的。

從演算法角度來說,很自然要考慮到演算法的優化。經過查詢相關,關於無順序資料處理,在資料庫中有對應處理方法,還有可以建立索引,雜湊方式處理等,嗯,,先留個印象,慢慢學。

言歸正傳,下面是簡單的順序查詢的**,

順序查詢思想很簡單,就是掃瞄一遍無序資料,並在掃瞄過程中比較是否找到對應資料,如果找到了,可以返回對應的索引值;如果沒找到,可以返回沒找到。

#includeusing namespace std;

// 順序查詢

int sequentialsearch(int* list1, int length, int num)

if (i == length) }}

int main() ;

int index = sequentialsearch(list1, length, num);

cout << "順序查詢的結果: " << endl;

if (index <0)

else

system("pause");

}

【折半查詢】

針對有序資料,折半查詢是一種高效的資料查詢演算法。

下面圖是一般折半查詢演算法查詢過程,在查詢前要先確定low,high,mid三個變數,這三個變數代表資料的索引位置,每次折半會減小當前一半的資料(建立在有序資料的基礎上)。

/* 折半查詢法:

折半查詢法針對有序的資料,是一種非常高效的資料查詢法

1m 資料, 大約100萬, 利用折半查詢最差情況下大約尋找20次

1g資料, 大約10億, 利用折半查詢最差情況下大約尋找30次

*/int binarysearch(int* list, int length, int num)

else if (list[mid] < num)

else

} // **執行到這裡說明在中途沒有跳出,說明沒有在資料序列中找到這個資料,返回查詢失敗

return -1;

}int main() ;

// 函式返回對應的索引值

int index = binarysearch(list1, length, num);

cout << "折半查詢資料結果: " << endl;

if (index == -1)

else

system("pause");

}通過折半查詢不難發現,它每次都會將資料減小一般,所以這是一種二叉樹結構,父節點正好就是中間的mid,而左分支與右分支就是當前的low與high。

資料結構筆記(查詢 順序查詢 折半查詢)

1 列表 由同一型別的資料元素組成的集合。2 關鍵碼 資料元素中的某個資料項,可以標識列表中的乙個或一組資料元素。3 鍵值 關鍵碼的值。4 主關鍵碼 可以唯一地標識乙個記錄的關鍵碼。5 次關鍵碼 不能唯一地標識乙個記錄的關鍵碼。6 查詢 在具有相同型別的記錄構成的集合中找出滿足給定條件的記錄。7 查...

資料結構與演算法(C ) 順序查詢與折半查詢

順序查詢 速度慢 例如 100萬個資料,平均要找50萬次 沒有排序的資料 只能順序查詢 include using namespace std int sequesearch int a,const int n,const int x int main int result int num 7 re...

資料結構 順序表查詢(折半查詢 差值查詢)

include include include define maxsize 10 首先構造乙個陣列,由隨機數生成,同時確保沒有重複元素。為了排序之後查詢時候方便 為了確保沒有重複的元素使用了乙個簡單的查詢函式 用陣列的0號元素來作為哨兵 化簡了操作 int search0 int a,int le...