一些简单小算法

二分查找

#include <iostream>

using namespace std;

//非递归实现
int BinarySearch(int array[], int len, int value)
{
	if (array == NULL || len <= 0)
		return -1;

	int low = 0;
	int high = len - 1;
	while (low <= high)
	{
		int mid = low + (high - low) / 2;
		if (array[mid] == value)
			return mid;
		else if (array[mid] > value)
			high = mid - 1;
		else
			low = mid + 1;
	}

	return -1;
}
//递归实现
int BinarySearch_Recursive(int array[], int low, int high, int value)
{
	if (low > high)
		return -1;
	int mid = low + (high - low) / 2;
	if (array[mid] == value)
		return mid;
	else if (array[mid] > value)
		return BinarySearch_Recursive(array, low, mid - 1, value);
	else
		return BinarySearch_Recursive(array, mid + 1, high, value);

}

int main(int argc, char *argv[])
{
	int i, j;
	int arr[10];
	for (i = 0; i < 10; i++)
	{
		arr[i] = i * 2;
	}
	cout << "Input the search number:";
	cin >> j;
	int location = BinarySearch(arr, 10, j);
	if (location != -1)
		cout << "Exist1:" << location << endl;
	else
		cout << "Not existed in array!" << endl;
	location = BinarySearch_Recursive(arr, 0, 9, j);
	if (location != -1)
		cout << "Exist2:" << location << endl;
	else
		cout << "Not existed in array!" << endl;
	system("pause");
	return 0;
}

最大子段和

#include <iostream>

using namespace std;

//b[j] = max{b[j-1]+a[j], a[j]}  0 =< j < n
int MaxSum(int n, int* a)
{
	int sum = 0, b = 0;
	for (int i = 0; i < n; i++)
	{
		if (b > 0)
		{
			b += a[i];
		}
		else
		{
			b = a[i];
		}
		if (b > sum)
		{
			sum = b;
		}
	}
	return sum;
}

int main()
{
	int a[10] = { 1, -8, 3, -4, 5, 7, 5, 1, -2, 9 };
	int res = MaxSum(10, a);
	cout << res << endl;
	system("pause");
	return 0;
}
posted @ 2019-09-19 21:34  煊奕  阅读(184)  评论(0编辑  收藏  举报