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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

顺序查找(Sequential Search)

發布時間:2023/11/29 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 顺序查找(Sequential Search) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、定義

順序查找又叫線性查找,是最基本的查找技術。

2、基本思想

? ?  從表的一端開始(第一個或最后一個記錄),順序掃描線性表,依次將掃描到的結點關鍵宇和給定值K相比較。若當前掃描到的結點關鍵字與K相等,則查找成功;若掃描結束后,仍未找到關鍵字等于K的結點,則查找失敗。

3、存儲結構

  順序查找方法既適用于線性表的順序存儲結構,也適用于線性表的鏈式存儲結構(使用單鏈表作存儲結構時,掃描必須從第一個結點開始)。

????????注意:單鏈表為什么從第一個掃描,而不是最后一個,這與其存儲結構有關,單鏈表名字即表示第一個第一個結點的地址,而不是最后一個結點的地址。

4、順序查找算法

(1)類型說明

typedef struct{KeyType key;InfoType otherinfo; //此類型依賴于應用}NodeType;typedef NodeType SeqList[n+1]; //0號單元用作哨兵

(2)具體算法

/*順序查找,參數說明:a——數組;n——要查找的數組個數;key——要查找的關鍵字 */ int SeqSearch(int *a,int n,int key) //這里是指針引用 { int i; for(i=1;i<=n;i++){//缺陷:每次循環都需要對i是否越界,即是否小于等于n做判斷if(a[i]=key)return i;}return 0; }

上述操作中,每次循環都需要對i是否越界,即是否小于等于n做判斷,我們可以設置一個哨兵,不需要每次i與n作比較,改進方案如下:

/*有哨兵的順序查找*/ int SeqSearch(int *a,int n,int key) //這里是指針引用 { int i; a[0]=key;/*設置a[0]為關鍵字值,我們稱之為“哨兵”,當然也可以設置最后一個元素為“哨兵”*/int n;/*循環從數組尾部開始*/while(a[i]!=key){i--;}return i; /*返回0說明查找失敗*/}

當然參數也可以如下設置,把元素個數放在數據結構體中定義:

int SeqSearch(Seqlist R,KeyType K) { //在順序表R[1..n]中順序查找關鍵字為K的結點,//成功時返回找到的結點位置,失敗時返回0int i;R[0].key=K; //設置哨兵for(i=n;R[i].key!=K;i--); //從表后往前找return i; //若i為0,表示查找失敗,否則R[i]是要找的結點 }

3、算法分析

① ?算法中監視哨R[0]的作用

????為了在for循環中省去判定防止下標越界的條件i≥1,從而節省比較的時間。

成功時的順序查找的平均查找長度:

? ? ??

????在等概率情況下,pi=1/n(1≤i≤n),故成功的平均查找長度為

? ? ? ? (n+…+2+1)/n=(n+1)/2

????即查找成功時的平均比較次數約為表長的一半。

????若K值不在表中,則須進行n+1次比較之后才能確定查找失敗。

表中各結點的查找概率并不相等的ASL

【例】在由全校學生的病歷檔案組成的線性表中,體弱多病同學的病歷的查找概率必然高于健康同學的病歷,由于上式的ASLsq在pn≥pn-1≥…≥p2≥p1時達到最小值。

????若事先知道表中各結點的查找概率不相等和它們的分布情況,則應將表中結點按查找概率由小到大地存放,以便提高順序查找的效率。

????為了提高查找效率,對算法SeqSearch做如下修改:每當查找成功,就將找到的結點和其后繼(若存在)結點交換。這樣,使得查找概率大的結點在查找過程中不斷往后移,便于在以后的查找中減少比較次數。

順序查找的優點

????算法簡單,且對表的結構無任何要求,無論是用向量還是用鏈表來存放結點,也無論結點之間是否按關鍵字有序,它都同樣適用。

順序查找的缺點

????查找效率低,因此,當n較大時不宜采用順序查找。

⑥ ?適用情況

????對那些查找少而又經常需要改動的線性表,可采用鏈表作存儲結構,進行順序查找。

轉載于:https://www.cnblogs.com/yedushusheng/p/5524175.html

總結

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

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