下面就三種常見的查詢演算法(順序查詢、二分查詢、分塊查詢)進行總結並附實現**,**已驗證。
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.優化思想 根據經驗,目前被查到越多的元素,將來可能被查到的可能性也越大。所以可以考慮,每次查詢到乙個元素後,將它和直接前驅交換位置。如果上述的經驗從概率上來講是成立的,則可以加快順序查詢...