91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c++有序表查找的方法是什么

發布時間:2021-12-08 14:01:26 來源:億速云 閱讀:117 作者:iii 欄目:大數據

本篇內容介紹了“c++有序表查找的方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1.折半查找法-binary search

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

//折半查找法
int BinarySearch(int* a,int n, int key)
{
	int low=0;
	int high=n-1;
	while(low<=high)
	{
		int mid = (low+high)/2;
		if(key<a[mid])
		{
			high=mid-1;
		}
		else if(key>a[mid])
		{
			low = mid+1;
		}
		else
			return mid;
	}
	return -1;//表示失敗
}

      折半查找法類似于把靜態有序查找表分成了兩顆子樹,時間復雜度為O(log N),當我們對順序數據已經排序好,并且沒有頻繁插入刪除時用折半查找法。

2.插值查找法

      我們在字典中查找apple或者zoo一定不是按照折半查找法這樣 會直接從前面或者后面查找,

不一定非要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)
{
	int low=0;
	int high = n-1;
	while(low<=high)
	{
		int mid = low+(low+high)*((key-a[low])/(a[high]-a[low]));
		if(key<a[mid])
		{
			high = mid-1;
		}
		else if(key>a[mid])
		{
			low=mid+1;
		}
		else
		{
			return mid;
		}
	}
	return -1;
}

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

3.斐波那契查找 O(log N)

//斐波那契數列
void Fibonacci()
{
	int F[100];
	F[0]=0;
	F[1]=1;
	for(int i=2;i<=100;i++)
	{
		F[i]=F[i-1]+F[i-2];
	}
}

int Fibonacci_Search(int* a, int n, int key)
{
	int k=0;
	int low=0;
	int high=n-1;
	while(n>F[k]-1)//計算n位于斐波那契數列的位置
	{
		k++;
	}
	for(int i=n-1;i<F[k]-1;i++)
	{
		a[i]=a[n-1];
	}//將斐波那契數列 不滿地方補全
	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-1)
			{
				return mid;
			}
			else
			{
				return -1;//失敗
			}
		}
	}
}

應當說 當順序存儲無序時 采用順序查找法

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

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

斐波那契法mid=low+F[k-1]=1; 
以上三中算法無非就是mid 選取的不一樣而已 不過在mid 選取時候也有加減乘除計算的。

“c++有序表查找的方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

河源市| 隆安县| 宣城市| 彰化市| 太仆寺旗| 桓台县| 扶沟县| 友谊县| 秭归县| 三明市| 天气| 南昌市| 彰武县| 德昌县| 望都县| 荥阳市| 区。| 五莲县| 武夷山市| 大邑县| 田东县| 中西区| 阿拉善盟| 泰来县| 定远县| 西充县| 贡觉县| 田阳县| 项城市| 桐庐县| 江阴市| 临猗县| 奇台县| 简阳市| 阆中市| 青冈县| 民乐县| 罗源县| 西乡县| 哈尔滨市| 崇文区|