`
binyan17
  • 浏览: 203298 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

二分查找算法——Java版

阅读更多

这是将网上的C++版的改写成Java的

理论上把函数f()改一下就可以计算任意方程的0点。

仅供参考,可以将其写成递归的。

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ErFenFa {

	static int m;
	static double x1, x2, x3;

	public static double f(double x) {
		double y;
		y = x * x * x - x - 1;
		return y;
	}

	public static void main(String[] args) throws NumberFormatException,
			IOException {
		double a, b;
		System.out.println("please input two number a,b");
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		a = Double.valueOf(br.readLine());
		b = Double.valueOf(br.readLine());

		double x1 = a;
		double x2 = b;
		double x3;

		for (int i = 1;; i++) {
			if (f(x1) == 0) {
				m = (int) (x1 * 100);
				x1 = m / 100;
				System.out.println("方程的根是x=" + x1 + ",迭代次数=" + i);
			}
			if (f(x2) == 0) {
				m = (int) (x2 * 100);
				x2 = m / 100;
				System.out.println("方程的根是x=" + x2 + ",迭代次数=" + i);
			}
			if (f(x1) * f(x2) > 0) {
				System.out.println("方程无解!" + ",迭代次数=" + i);
				return;
			} else if (f(x1) * f(x2) < 0) {
				x3 = (x1 + x2) / 2; // return 1;

				if (f(x3) == 0) {
					m = (int) (x3 * 100);
					x3 = m / 100;
					System.out.println("方程的根是x=" + x3 + ",迭代次数=" + i);
				}
				if (f(x3) * f(x1) < 0) {
					x2 = x3;
					if (Math.abs(x1 - x3) < 0.00001) {
						m = (int) (x2 * 100);
						x2 = m / 100;
						System.out.println("方程的根是x=" + x2 + ",迭代次数=" + i);
						break;
					}
				}
				if (f(x3) * f(x2) < 0) {
					x1 = x3;// f(x3)*f(x2)
					if (Math.abs(x2 - x3) < 0.00001) {
						m = (int) (x1 * 100);
						x1 = m / 100;
						System.out.println("方程的根是x=" + x1 + ",迭代次数=" + i);
						break;
					}

				}
			}
		}
	}

}

 

分享到:
评论

相关推荐

    查找 算法——数据结构

    本实验主要探讨了一种高效查找算法——折半查找(Binary Search),并将其与线性查找等其他查找方法进行了对比。 折半查找,也称为二分查找,是一种基于排序数组的查找算法。它的基本思想是在已知目标值与数组中...

    3种查找算法——数据结构实验

    本实验主要探讨了三种基本的查找算法:顺序查找、折半查找(二分查找)和索引查找,这些算法都是在数组或集合中寻找特定元素的重要方法。下面将详细解释这三种查找算法,并结合C语言编程环境进行深入分析。 1. **...

    计算机算法——设计与分析导论(第三版).pdf

    有序数组允许采用更高效的搜索算法,比如二分查找,其时间复杂度为O(log n),这比在无序数组中进行线性搜索(O(n))要快得多。 在本部分内容的最后,书中提到了停机问题(halting problem),这是一个在计算机科学...

    数据结构&amp;算法——Java.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    数据结构与算法分析——Java语言描述-带书签目录高清扫描版

    查找算法包括顺序查找、二分查找和哈希查找,其中哈希表提供了近乎常数时间的查找效率。此外,高级算法如贪心算法,通常用于求解优化问题,每次做出局部最优选择,期望全局最优;动态规划则通过将大问题分解为子问题...

    数据结构实验——查找(二分查找&顺序查找)

    一、实验目的: 熟悉各种查找算法及其复杂性,能够根据实际情况选择合适的存储结构。 二、实验要求: 1、掌握查找的基本方法。 2、提交实验报告,报告...编程分别对有序顺序表的顺序查找,二分查找算法进行实现。

    数据结构与算法——C++版(第2版)

    常见的算法包括排序(如冒泡排序、快速排序、归并排序)、搜索(如二分查找、深度优先搜索、广度优先搜索)、图算法(如Dijkstra最短路径算法、Floyd-Warshall所有对最短路径算法)等。在C++中,我们可以利用模板类...

    数据结构与算法——C++版(第3版)源文件

    3. **排序与搜索算法**:书中可能会讲解各种排序算法(冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等)和搜索算法(顺序搜索、二分搜索、深度优先搜索、广度优先搜索等)。排序算法用于整理数据,而...

    数据结构与算法——C++版

    查找算法中,二分查找适用于有序数据,而哈希查找则提供近乎恒定的时间复杂度。递归是解决复杂问题的有效工具,如在树的遍历和动态规划问题中。 此外,C++中的STL(Standard Template Library,标准模板库)也是...

    算法——查找(有实例讲解)

    本篇文章将深入探讨两种常见的查找算法:顺序查找和二分查找,并通过实例来帮助你理解它们的工作原理和实际应用。 首先,我们来讨论顺序查找。顺序查找是最基础的查找方法,适用于任何线性数据结构,如数组或链表。...

    Python搜索算法-二分查找算法详解

    Python搜索算法——二分查找算法详解

    数据结构与算法——C++版.rar

    常见算法包括排序(如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序)、搜索(如线性搜索、二分搜索)、图算法(如深度优先搜索、广度优先搜索、最短路径算法Dijkstra、Floyd-Warshall)、动态规划等。...

    十种常用算法之二分查找(java版)(csdn)————程序.pdf

    本文将详细介绍非递归实现的二分查找算法,并通过一个Java程序进行示例说明。 首先,我们要明确二分查找的前提条件:待查找的数组必须是有序的,通常为升序排列。如果数组无序,那么二分查找将无法正常工作。接下来...

    数据结构——JAVA版

    《数据结构——JAVA版》这本书的描述指向了Mark Allen Weiss所著的《数据结构与算法分析——Java语言描述》第2版的中文翻译版。该书在IT专业领域内被广泛认可,是学习Java语言以及数据结构与算法分析的优秀教材。书...

    数据结构与算法分析——Java语言描述

    常见的排序算法(如冒泡排序、快速排序、归并排序、堆排序)和查找算法(如线性查找、二分查找)都有详尽的解释和实例。此外,还包括动态规划、贪心算法、回溯法等高级算法思想。算法分析不仅关注实现,更强调时间...

    算法分析与设计——二分搜索

    算法分析与设计——二分搜索 本文档将详细介绍算法分析与设计中的二分搜索算法,涵盖其基本概念、实现步骤、优缺点分析等方面,旨在帮助算法初学者深入了解二分搜索的原理和应用。 一、基本概念 二分搜索是一种...

Global site tag (gtag.js) - Google Analytics