日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大话数据结构22:几种常见的静态查找算法

發(fā)布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大话数据结构22:几种常见的静态查找算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

基礎(chǔ)

針對順序表進(jìn)行的查找
順序查找
插值查找

代碼

#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 100 /* 存儲空間初始分配量 */typedef int Status; /* Status是函數(shù)的類型,其值是函數(shù)結(jié)果狀態(tài)代碼,如OK等 */int F[100]; /* 斐波那契數(shù)列 *///無序哨兵順序查找 int Sequential_Search(int* a, int n, int key) {int i;for (int i = 1; i <= n; i++){if (a[i] == key)return i;}return 0; }//有哨兵順序查找 int Sequential_Search2(int* a, int n, int key) {a[0] = key;int i = n;while (a[i] != key){i--;}return i; }//折半查找 int Binary_Search(int* a, int n, int key) {int low;int high;int mid;high = n;low = 1;while (low <= high){mid = (low + high) / 2;if (key < a[mid])high = mid - 1;else if (key > a[mid])low = mid + 1;else{return mid;}}return 0; }//插值查找 int Interpolation_Search(int* a, int n, int key) {int low;int high;int mid;low = 1;high = n;while (low <= high){mid = low + (high - low) * (key - a[low]) / (a[high] - a[low]); /* 插值 */if (key < a[mid]) /* 若查找值比插值小 */high = mid - 1; /* 最高下標(biāo)調(diào)整到插值下標(biāo)小一位 */else if (key > a[mid])/* 若查找值比插值大 */low = mid + 1; /* 最低下標(biāo)調(diào)整到插值下標(biāo)大一位 */elsereturn mid; /* 若相等則說明mid即為查找到的位置 */}return 0; }///* 斐波那契查找 */ /* 斐波那契查找 */ int Fibonacci_Search(int* a, int n, int key) {int low, high, mid, i, k = 0;low = 1; /* 定義最低下標(biāo)為記錄首位 */high = n; /* 定義最高下標(biāo)為記錄末位 */while (n > F[k] - 1)k++;for (i = n; i < F[k] - 1; i++)a[i] = a[n];while (low <= high){mid = low + F[k - 1] - 1;if (key < a[mid]){high = mid - 1;k = k - 1;}else if (key > a[mid]){low = mid + 1;k = k - 2;}else{if (mid <= n)return mid; /* 若相等則說明mid即為查找到的位置 */elsereturn n;}}return 0; }int main(void) {int a[MAXSIZE + 1], i, result;int arr[MAXSIZE] = { 0,1,16,24,35,47,59,62,73,88,99 };for (i = 0; i <= MAXSIZE; i++){a[i] = i;}result = Sequential_Search(a, MAXSIZE, MAXSIZE);printf("Sequential_Search:%d \n", result);result = Sequential_Search2(a, MAXSIZE, 1);printf("Sequential_Search2:%d \n", result);result = Binary_Search(arr, 10, 62);printf("Binary_Search:%d \n", result);result = Interpolation_Search(arr, 10, 62);printf("Interpolation_Search:%d \n", result);F[0] = 0;F[1] = 1;for (i = 2; i < 100; i++){F[i] = F[i - 1] + F[i - 2];}result = Fibonacci_Search(arr, 10, 62);printf("Fibonacci_Search:%d \n", result);return 0; }

總結(jié)

以上是生活随笔為你收集整理的大话数据结构22:几种常见的静态查找算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。