• 一些简单小算法


    二分查找

    #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;
    }
    
    感谢阅读,如有问题,请批评指正,谢谢。
  • 相关阅读:
    VS中Debug和Release两个版本的区别
    Activex、OLE、COM、OCX、DLL之间的区别
    解决 C/C++ 程序执行一闪而过的方法
    调用规范stdcall、cdecl、fastcall、thiscall 、naked call的汇编理解
    Windows的MAX_PATH
    Servlet学习笔记(1)
    Eclipse使用JDBC小案例
    Oracle DB 总结(SQL)
    利用JS写一个计算平方的网页
    CSS部分语法1
  • 原文地址:https://www.cnblogs.com/clwsec/p/11552748.html
Copyright © 2020-2023  润新知