各類查詢演算法總結

2021-06-18 00:14:05 字數 1229 閱讀 9234

下面就三種常見的查詢演算法(順序查詢、二分查詢、分塊查詢)進行總結並附實現**,**已驗證。

1、順序查詢

基本思想:順序查詢顧名思義就是按順序挨個查詢

時間複雜度:o(n)

演算法分析:簡單易懂,對查詢序列也沒啥要求,對於很多雜亂無章的字串,常用這種演算法,但效率低下

實現**:

int ordersearch(int *p, int n,int key)

return -1;

}2、二分查詢法

基本思想:二分查詢也稱折半查詢,利用序列元素直接的有序性,採用分治策略,將n個元素的序列以a[n/2]為界分成兩部分,如果關鍵字(要查詢的元素)=a[n/2]則key的位置就是n/2,如果key時間複雜度:o(log(n))

演算法分析: 此演算法比較次數少,速度較快,但要求查詢序列必須是有序的

實現**:用遞迴和非遞迴兩種方法實現

int bsearch_rec(int *p, int s, int e, int ch)//利用遞迴recursion

mid = (s + e) / 2;

if(p[mid] == ch)

return  mid;

if(ch < p[mid])

return bsearch_rec(p, s, mid-1, ch);

else

return bsearch_rec(p, mid+1, e, ch);

}int bsearch_nonrec(int *p, int s, int e, int ch)

if(s > e)

return -1;

}3、分塊查詢

基本思想:又稱索引順序查詢,其是對順序查詢的一種改進。先將n個資料元素按塊有序(前一塊的任一元素都比當前塊的任一元素小),所謂塊其實就是乙個區間,塊必須有序,但塊內可以無序。步驟就是先成m塊(m<=n),然後再對每個塊進行順序查詢。

實現**:

typedef struct blockindex

blockindex;//分為4塊

blockindex blockind[4];

int blocksearch(int *p, int n,int des)

return -1;}}

綜上所述,二分查詢或者分塊查詢,都需要一定的條件,而實際序列往往是不能滿足,所以最常用的還是順序查詢,其他兩個只能看場合使用

各類排序演算法

快速排序 void quicksort int data,int low,int high if a k a i 冒泡法 void maopao int a,int num num元素個數 歸併排序 插入排序 include stdafx.h includeusing namespace std d...

查詢演算法總結

順序查詢演算法 1.演算法描述 順序比較即可。2.平均查詢長度 n 1 2,其中n為表長。3.演算法實現 省略4.優化思想 根據經驗,目前被查到越多的元素,將來可能被查到的可能性也越大。所以可以考慮,每次查詢到乙個元素後,將它和直接前驅交換位置。如果上述的經驗從概率上來講是成立的,則可以加快順序查詢...

查詢演算法總結

順序查詢演算法 1.演算法描述 順序比較即可。2.平均查詢長度 n 1 2,其中n為表長。3.演算法實現 省略4.優化思想 根據經驗,目前被查到越多的元素,將來可能被查到的可能性也越大。所以可以考慮,每次查詢到乙個元素後,將它和直接前驅交換位置。如果上述的經驗從概率上來講是成立的,則可以加快順序查詢...