日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构-顺序查找和折半查找

發布時間:2023/12/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构-顺序查找和折半查找 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

順序查找即線性查找,通常分為一般無序線性表的順序查找和有序順序表的順序查找。
一般線性表的順序查找:從線性表的一端開始,逐個檢查關鍵字是否滿足條件,若存在則查找成功,返回線性表的位置;否則查找失敗。
有序表順序查找:即查找之前就已知順序表是排序了的。假設線性表L是按關鍵字從小到大排列的,查找的順序是從前往后查找,待查找元素的關鍵字為key,
當查找到第i個元素時,發現第i個元素對應的關鍵字小于key,但第i+1個元素的關鍵字均大于key,所以表中不存在關鍵字為key的元素。

折半查找:又稱為二分法查找,僅適用于有序的順序表。基本思路為:首先將給定值key與表中中間位置元素的關鍵字比較,若相等,則查找成功,返回元素位置,
若不等,則所需查找的元素只能在中間元素以外的前半部分或后半部分中(例如:若升序表中,給定的key大于中間元素的關鍵字,則所查找的元素只可能在后半部分)。

然后縮小范圍繼續進行同樣的查找,如此重復直至找到為止,或者查找失敗。

// // Created by Administrator on 2018/7/6. // #include "stdio.h"/*** 順序查找法1* @param str* @param n* @param key* @return*/ int search1(int str[], int n, int key) {for (int i = 0; i < n; ++i) {if (str[i] == key) {return i;}}return -1; }/*** 順序查找法 (哨兵模式:0號單元留空)* @param str* @param n* @param key* @return*/ /*int search2(int str[], int n, int key) {str[0] = key;while (str[n] != key) {n--;}return n; }*//*** 折半查找法* @param str* @param len* @param key* @return*/ int halfSearch(int str[], int len, int key) {int low, high, mid;low = 0;high = len - 1;while (low <= high) {mid = (low + high) / 2;if (str[mid] == key) {return mid;} else if (str[mid] < key) {//rightlow = mid + 1;} else if (str[mid] > key) {//lefthigh = mid - 1;}}return -1; }/*** 插值法(按比例查找:經測試 存在局限性)* @param str* @param len* @param key* @return*/ /*int precentSearch(int str[], int len, int key) {int low, high, mid;low = 0;high = len - 1;while (low <= high) {mid = low + (key - str[low] / str[high] - str[low]) * (high - low); // 插值查找的唯一不同點if (str[mid] == key) {return mid;} else if (str[mid] < key) {//rightlow = mid + 1;} else if (str[mid] > key) {//lefthigh = mid - 1;}}return -1; }*/int main() {int str[9] = {1, 1, 2, 3, 5, 8, 13, 21, 34};int key = 3;int i; // i = precentSearch(str, 9, key); // printf("按比例查找法查找到關鍵字 %d 的位置為 %d \n", key, i);i = search1(str, 9, key);printf("順序查找法1查找到關鍵字 %d 的位置為 %d \n", key, i); // i = search2(str, 9, key); // printf("順序查找法2查找到關鍵字 %d 的位置為 %d \n", key, i);i = halfSearch(str, 9, key);printf("折半查找法查找到關鍵字 %d 的位置為 %d \n", key, i);return 0; }

總結

以上是生活随笔為你收集整理的数据结构-顺序查找和折半查找的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。