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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)

發(fā)布時間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

一、折半查找(二分查找)

二、插值查找

總代碼


一、折半查找(二分查找)

原理:一次次折半,不斷向著查找值的位置靠近 。

適用場景:有序(必須)

流程:開始時,min標(biāo)志首,max標(biāo)志尾,medium=(min+max)/2。然后即可開始查找,判斷str[medium]和要查找的值是否相等:1、相等:min = medium+1 ????????2、不相等:max=medium-1? 。

?

?

//折半查找(注:前提是有序序列)
int Binary_Search(char ch)
{int min = 0, max = strlen(str)-1;int medium;while (min <= max){medium = (max + min) / 2;		//取中值if (ch == str[medium])return medium;else if (ch > str[medium])min = medium+1;				//進(jìn)入右半邊(medium位置已查找過,跳過)elsemax = medium-1;				//進(jìn)入左半邊(medium位置已查找過,跳過)}return -1;
}

二、插值查找

比例查找到最接近的位置。選取一段的比例(如:(min+小半段)*總),有序且數(shù)據(jù)分布均勻時,可以更快的定位。

適用場景:有序(必須),數(shù)值分布均勻,線性增長。

//插值查找(比例查找)
int Insert_Search(char ch)
{int medium, min = 0, max = strlen(str) - 1;while (min <= max){//取比例medium = min + (ch - str[min]) / (str[max] - str[min]) * (max - min);	if (ch == str[medium])return medium;else if (ch > str[medium])min = medium + 1;				//進(jìn)入右半邊(medium位置已查找過,跳過)elsemax = medium - 1;				//進(jìn)入左半邊(medium位置已查找過,跳過)}return -1;
}

總代碼

//有序表查找(折半查找、插值查找)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string>char str[20];//輸入
char Input()
{char ch = ' ';printf("請輸入一串?dāng)?shù)組:\n");for (int i = 0; i < 20 && ch != '\n'; i++){scanf("%c", &ch);str[i] = ch;}printf("請輸入您想要查找的字符:");scanf("%c", &ch);return ch;
}//折半查找(注:前提是有序序列)
int Binary_Search(char key)
{int min = 0, max = strlen(str)-1, mid;while (min <= max){mid = (max + min) / 2;		//取中值if (key == str[mid])return mid;else if (key > str[mid])min = mid+1;				//進(jìn)入右半邊(mid位置已查找過,跳過)elsemax = mid-1;				//進(jìn)入左半邊(mid位置已查找過,跳過)}return -1;
}//插值查找(比例查找)
int Insert_Search(char key)
{int mid, min = 0, max = strlen(str) - 1;while (min <= max){//取比例mid = min + (key - str[min]) / (str[max] - str[min]) * (max - min);if (key == str[mid])return mid;else if (key > str[mid])min = mid + 1;			//進(jìn)入右半邊(mid位置已查找過,跳過)elsemax = mid - 1;			//進(jìn)入左半邊(mid位置已查找過,跳過)}return -1;
}int main()
{char ch;ch = Input();				//輸入printf("折半查找(二分查找)結(jié)果: %d\n", Binary_Search(ch));		//折半查找printf("插值查找結(jié)果:%d\n", Insert_Search(ch));					//插值查找return 0;
}

總結(jié)

以上是生活随笔為你收集整理的数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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