顺序查找(c/c++)
生活随笔
收集整理的這篇文章主要介紹了
顺序查找(c/c++)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
順序查找
順序查找分為對無序表和有序表的查找:
對無序表的查找算法如下:
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
在直接查找的基礎上更進一步,采用折半查找,代碼如下:
折半查找的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++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最短路径(Floyd算法)(c/c++)
- 下一篇: 二叉排序树(c/c++)