首先把需要查詢的集合放到乙個陣列裡。然後針對指定的元素在陣列裡進行查詢,下面主要介紹兩種方法
我們把需要儲存的資料記錄在如圖所示的結構裡
用乙個結構指向乙個陣列,其中結構的第一項指向陣列,第二項記錄陣列中資料的個數
之後的順序查詢函式裡主要要介紹一種哨兵的方法
如果不用哨兵,那麼查詢函式應該為
如果把第一項設為k,那麼就可以省掉「i>0」這個條件,因為至少到0的時候可以找到k,但是如果在這個位置找到k的話,就說明已經在正常的佇列中沒有找到k,所以不影響查詢的作用
詳細的**如下
#include #include #include#define maxsize 100
typedef int elementtype;
struct lnode;
typedef struct lnode *list;
//順序查詢函式
int sequentialsearch(list tbl, elementtype k);
int main()
; list tbl;
//tbl=(struct lnode *)malloc(sizeof(struct lnode));
//memcpy(tbl->element,element,sizeof(element));
//tbl->length=10;
struct lnode s;
memcpy(s.element,element,sizeof(element));
s.length=10;
tbl=&s;
for(int i=1;i<=s.length;i++)
printf("\n");
int seq=sequentialsearch(tbl,6);
printf("%d\n",seq );
seq=sequentialsearch(tbl,10);
printf("%d\n",seq );
seq=sequentialsearch(tbl,0);
printf("%d\n",seq );
//int ele = sequentialsearch();
system("pause");
return 0;
}//順序查詢函式
int sequentialsearch(list tbl, elementtype k);
查詢的結果為
其中第三種情況表示沒有找到0這個元素,另外如果本來陣列就是從0位置開始的,可以一上來就判斷0位置是不是需要查詢的元素,如果是,不就找到了嗎,如果不是,返回0就表示沒找到,這就是順序查詢。
從上面的分析可以看到,對於已經按照公升序或者降序的順序排列好的元素陣列,順序查詢的複雜度是o(n),那麼有沒有一種可以縮短查詢速度的方法呢,答案是有的,就是我們下面要介紹的二分查詢
**如下
#include #include #include#define maxsize 100
typedef int elementtype;
struct lnode;
typedef struct lnode *list;
//二分查詢函式
int binarysearch(list tbl,elementtype k);
int main()
; list tbl;
//tbl=(struct lnode *)malloc(sizeof(struct lnode));
//memcpy(tbl->element,element,sizeof(element));
//tbl->length=10;
struct lnode s;
memcpy(s.element,element,sizeof(element));
s.length=10;
tbl=&s;
for(int i=1;i<=s.length;i++)
printf("\n");
int seq=binarysearch(tbl,6);
printf("%d\n",seq );
seq=binarysearch(tbl,10);
printf("%d\n",seq );
seq=binarysearch(tbl,0);
printf("%d\n",seq );
system("pause");
return 0;
}//二分查詢函式
int binarysearch(list tbl, elementtype k)
return notfound;
}
我們這裡的二分查詢函式裡第乙個if和if else裡的內容和上面的置換了,是因為我們這裡的陣列是降序
執行結果如下
其時間複雜度為o(logn),有效的縮短了查詢時間,不過有個條件限制,就是一定要是順序陣列
嗯,就是這樣喵
Python 合併有序陣列兩種方法
陣列是程式語言的通用稱呼,在python裡,列表就是我們常說的陣列 以下列表 陣列 目錄 1 用指標合併兩個有序陣列 兩個都是有序的 2 用sort函式合併兩個有序陣列 先看下面兩個陣列 arr1 1 3 4 6 10 arr2 2 5 8 11 先了解下思路,我們運用的方法是將某乙個陣列加入到另乙...
列表查詢的兩種方法
列表查詢 從列表中查詢指定元素 輸入 列表 待查詢元素 輸出 元素下標或未找到元素 二分查詢 1.順序查詢 時間複雜度為o n def linear search data set,value for i in range len data set if value data set i retur...
作業三 兩種方法判斷乙個有序陣列是否存在x
兩種檢索演算法 在乙個排好序的陣列t 1 n 中查詢x,如果x在t中,輸出x在 t的下標j 如果x不在t中,輸出j 0。方法1 直接遍歷查詢,因為可能存在多個值為x的數在陣列中,所有預先開乙個j陣列接收下表,最後組個輸出j 方法2 折半查詢發 折半查詢到下標後,輸出該點,另寫兩個函式checklef...