靜態有序陣列的查詢兩種方法

2021-07-24 12:14:19 字數 2934 閱讀 6844

首先把需要查詢的集合放到乙個陣列裡。然後針對指定的元素在陣列裡進行查詢,下面主要介紹兩種方法

我們把需要儲存的資料記錄在如圖所示的結構裡

用乙個結構指向乙個陣列,其中結構的第一項指向陣列,第二項記錄陣列中資料的個數

之後的順序查詢函式裡主要要介紹一種哨兵的方法

如果不用哨兵,那麼查詢函式應該為

如果把第一項設為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...