有序表查詢

2021-07-29 16:13:59 字數 1094 閱讀 2306

順序表查詢法,**簡單但是不智慧型。

1.折半查詢法-binary search

如果線性表在排序是有序的 這種情況下我們才用順序儲存。

//折半查詢法

int binarysearch(int* a,int n, int key)

else

return mid;

} return -1;//表示失敗

}

折半查詢法類似於把靜態有序查詢表分成了兩顆子樹,時間複雜度為o(log n),當我們對順序資料已經排序好,並且沒有頻繁插入刪除時用折半查詢法。

2.插值查詢法

不一定非要mid=(low+high)/2;

mid=(low+high)/2=low+(high-low)/2;

mid = low+(high-low)((key-a[low])/(a[high]-a[low]) )

//插值查詢法

int binarysearch(int* a, int n, int key)

else

}return -1;

}

此時時間複雜度還是o(longn),當關鍵字分部比較均勻時候可用此法。

3.斐波那契查詢o(log n)

//斐波那契數列

void fibonacci()

}int fibonacci_search(int* a, int n, int key)

for(int i=n-1;ia[mid])

else

else

}}}

應當說 當順序儲存無序時 採用順序查詢法

當順序儲存已經排序好 我們可以採用折半查詢法mid=(low+high)/2;

插值查詢法mid=low+(high-low)*((key-a[low])/(a[high]-a[low]));

斐波那契法mid=low+f[k-1]=1; 

以上三中演算法無非就是mid 選取的不一樣而已 不過在mid 選取時候也有加減乘除計算的。

查詢 有序表查詢

1 折半查詢 折半查詢又稱二分查詢,時間複雜度為 2 插值查詢 插值查詢是另一種有序表查詢演算法,其核心就在於插值公式 3 斐波那契查詢 4 三種有序表查詢演算法比較 三種有序表查詢本質上是分隔點的選擇不同,折半查詢分隔點是 折半查詢進行加法和除法運算 mid low high 2 插值查詢進行複雜...

有序表查詢

折半查詢 折半查詢又稱為二分查詢,它的前提是線性表中的記錄必須是關鍵碼有序,線性表必須採用順序儲存。折半查詢的基本思想是 在有序表中,取中間記錄作為比較物件,若給定值與中間記錄相等,則查詢成功 若給定值小於中間記錄關鍵字,則在中間記錄的左半區繼續查詢 若給定值大於中間記錄關鍵字,則在中間記錄的右半區...

有序表查詢

順序表查詢法,簡單但是不智慧型。1.折半查詢法 binary search 如果線性表在排序是有序的 這種情況下我們才用順序儲存。折半查詢法 int binarysearch int a,int n,int key else return mid return 1 表示失敗 折半查詢法類似於把靜態有...