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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

顺序查找(c/c++)

發布時間:2025/6/17 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 顺序查找(c/c++) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
順序查找

順序查找分為對無序表和有序表的查找:
對無序表的查找算法如下:

int search(int* array, int num,int key)//數組下標從0開始 {int i=num;while (i >= 0 && array[i] != key)--i;return i; //i為-1時出錯 } int search(int* array, int num, int key)//數組下標從1開始 {int i = num;array[0] = key;//下標0處為監視位while (array[i] != key)--i;return i;//i為0時出錯 }

ASL(成功)=(1+2+…+n)/n=(n+1)/2,類似對號入座,第一個數試一次成功,第二個數試兩次,…第n個數試n次,然后求平均次數,再除以n即可。
ASL(失敗)=n+1;將所有數都試一遍之后,再試一次發現數組越界,退出,故為n+1

將數組下標0設為監視位,數組從下標1開始存儲數據,假定為升序的順序表的直接查找算法:

int sq_search(int* array, int num, int key) {int i = num;array[0] = key;if (array[i] < key)return 0;while (array[i] != key)--i;return i;//i為0時出錯 }

ASL(成功)=(1+2+…n)/n=(n+1)/2
ASL(失敗)=(1+2+…+n+1)/(n+1)=(n+2)/2
在直接查找的基礎上更進一步,采用折半查找,代碼如下:

int b_search(int* array, int num, int key) {int low = 1, high = num, mid;if (key<array[1] || key>array[num])//升序return 0;while (low <= high){mid = (low + high) / 2;if (array[mid] == key)return mid;if (array[mid] > key)high = mid - 1;elselow = mid + 1;}return 0; }

折半查找的ASL需要畫出折半查找判定樹,將數1到11存儲在數組進行折半查找所得判定樹:

上圖的畫法:(1+11)/2=6; (1+5)/2=3; (7+11)/2=9;…
ASL(成功)=(1+2+2+3+3+3+3+4+4+4+4)/11=3
ASL(失敗)=(3+3+3+3+4+4+4+4+4+4+4+4)/12=44/12=11/3(計算成功時的查找長度若比較4次,那么計算失敗時只需比較3次)

總結

以上是生活随笔為你收集整理的顺序查找(c/c++)的全部內容,希望文章能夠幫你解決所遇到的問題。

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