C++——《算法分析與設計》實驗報告——二分搜索算法

實驗名稱: 二分搜索算法

實驗地點:

實驗目的:

  1. 理解分治算法的概念和基本要素;
  2. 理解遞歸的概念;
  3. 掌握設計有效算法的分治策略;
  4. 通過二分搜索技術學習分治策略設計技巧;

實驗原理:

二分搜索算法也稱爲折半查找法,它充分利用了元素間的次序關係,採用分治策略,可在最壞的情況下用O(log n)完成搜索任務。

實驗內容:

  1. 使用二分搜索算法查找任意N個有序數列中的指定元素。
  2. 通過上機實驗進行算法實現。
  3. 保存和打印出程序的運行結果,並結合程序進行分析,上交實驗報告。
  4. 至少使用兩種方法進行編程。

 

源代碼:

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
using namespace std;
//這個算法僅適用於有序序列
int a[1000];
int BinarySearch1(int a[], int left, int right, int x)
{
	int mid;
	mid = (left + right) / 2;
	if(left < right) {
		if (x == a[mid])
			return mid;
		else if (x < a[mid])
			return BinarySearch1(a, left, mid - 1, x);//遞歸調用前一半數組
		else
			return BinarySearch1(a, mid + 1, right, x);//。。。後一半。。。
	}
	return 0;
}
int BinarySearch2(int a[], int left, int right, int x)
{
	int mid;
	while (left <= right) {
		mid = (left + right) / 2;
		if (x == a[mid])
			return mid;
		else if (x < a[mid])
			right = mid - 1;//遞歸調用前一半數組
		else
			left = mid + 1;//。。。後一半。。。
	}
	return 0;
}
int main()
{
	int x, n, flag = 0;
	cin >> x >> n;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	flag = BinarySearch2(a, 1, n, x);
	if (flag)
		printf("%d", flag);
	else
		printf("no answer");
	return 0;
}

 

實驗結果:

BinarySearch1:

BinarySearch2:

心得與體會:

  1. 理解分治算法的概念和基本要素;
  2. 理解遞歸的概念;
  3. 掌握設計有效算法的分治策略;
  4. 通過二分搜索技術學習分治策略設計技巧;
  5. 分析二分算法的時間和空間複雜度;
  6. 通過不同方式的二分算法增進對分治算法的理解。

 

參考文章

https://blog.csdn.net/zsnowwolfy/article/details/81039836

https://blog.csdn.net/weixin_45929067/article/details/104781020

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章