`
gogole_09
  • 浏览: 205560 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

数据结构与算法分析 --几种常用的算法

阅读更多
package com.base.algorithmanalysis;

/**
 * 几种常见的算法
 * 
 * @author google
 * 
 */
public class Base {

	/**
	 * 针对排序后的序列折半查找策略: 最好的情况是需要查找的元素x是否为居中的元素,如果是,答案就找到了。
	 * 如果X小于居中元素,采用同样的策略应用于居中元素左边已经排好的子序列。 如果X大于居中元素,则检查右边的元素.
	 * 
	 * @param ary
	 * @param target
	 * @return
	 */
	public static int binarySearch(int[] ary, int target) {
		int low = 0, high = ary.length - 1;
		while (low <= high) {
			int mid = (low + high) / 2;
			if (ary[mid] < target) {
				low = mid + 1;
			} else if (ary[mid] > target) {
				high = mid - 1;
			} else {
				return mid;
			}
		}
		return -1;
	}

	/**
	 * 最大公因数的欧几得算法 计算机连续计算余数直到余数是0为止,最后的非0余数就是最大公因数
	 */
	public static long gcd(long m, long n) {
		while (n != 0) {
			long tem = m % n;
			m = n;
			n = tem;
		}
		return m;
	}

	/**
	 * 求幂操作
	 * 
	 * @param x
	 * @param n
	 * @return
	 */
	public static long pow(long x, int n) {
		if (n == 0)
			return 1;
		if (n == 1)
			return x;
		/**
		 * 此处递归说明(以x=4,n=2为例) 第一次进来:4%2==0 return pow(x*x,n/2) 【A】 则进入递归
		 * pow(16,1) ==> n==1,return 16. 向上返回 【A】 则有:4%2==0 return
		 * pow(x*x,n/2)=16;
		 */
		if (n % 2 == 0)
			return pow(x * x, n / 2);
		else
			return pow(x * x, n / 2) * x;
	}

	/**
	 * 求最大子序列和,数组总和中最大的和,
	 * 用一临时变量存储当前最大值,再拿数组每个累计与之比较,大的就交换,如果累计的值小,则不处理。
	 * @param a
	 * @return
	 */
	public static int maxSubSum(int[] a) {
		int maxSum = 0, thisSum = 0;
		for (int j = 0; j < a.length; j++) {
			thisSum += a[j];
			if (thisSum > maxSum)
				maxSum = thisSum;
			else if (thisSum < 0)
				thisSum = 0;
		}
		return maxSum;
	}

	/**
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		 int[] aIs = { 10,10,10,20,-30,-49,1};
		// System.out.println("找到10,在索引" + binarySearch(aIs, 10) + "处");
		// System.out.println("15和55的最大公因数是:" + gcd(15, 50));
//		System.out.println(pow(4, 2));
		//最大子序列之和计算
		System.out.println(maxSubSum(aIs));
	}
}

 

分享到:
评论

相关推荐

    数据结构与算法分析--c语言描述

    《数据结构与算法分析--C语言描述》是由Mark Allen Weiss编写的关于数据结构和算法分析的书籍。这本书是英文版本,虽然在描述中提到了对学习C语言的朋友有很大的帮助,但是具体分析的是英文版的内容。 首先,本书的...

    <<数据结构与算法分析-C语言描述>>编程练习

    《数据结构与算法分析-C语言描述》是一本深入探讨数据结构和算法的书籍,它以C语言为载体,为读者提供了丰富的编程实践。这本教材的编程练习是学习过程中的重要组成部分,旨在帮助读者巩固理论知识,提升实际编程...

    数据结构与算法分析-C++描述

    在《数据结构与算法分析-C++描述》中,作者详细介绍了以下几种主要的数据结构: 1. **数组(Array)**:数组是一种线性数据结构,其中的元素按照一定的顺序排列,并且可以通过索引访问。数组的实现简单,但是插入和...

    数据结构与算法分析-C语言描述

    "数据结构与算法分析-C语言描述"这个主题涵盖了以下几个关键知识点: 1. **数据结构**:数据结构是组织和存储数据的方式,它决定了数据的操作效率。常见的数据结构包括数组、链表、栈、队列、树(如二叉树、AVL树、...

    数据结构与算法分析-java

    标题《数据结构与算法分析-java》说明这是一本专注于Java语言的数据结构和算法的教科书。本书由Mark Allen Weiss所著,目的在于通过Java语言来分析和探讨数据结构及算法的原理与应用。根据提供的部分目录内容,本书...

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

    ### 数据结构与算法分析C语言描述 #### 一、引言与目的 《数据结构与算法分析C语言描述》第二版是由Mark Allen Weiss所著的一本权威书籍,旨在深入讲解数据结构及其组织方法以及算法分析的基本原理。随着计算机...

    数据结构与算法分析java版

    ### 数据结构与算法分析Java版 #### 一、概述 《数据结构与算法分析Java版》是一本由Robert Lafore撰写的书籍,该书详细介绍了如何利用Java编程语言来实现和操作各种数据结构和算法。全书共分为六个部分,分别涵盖...

    Java数据结构与算法概述-初级篇.docx

    主要内容包括栈、队列、链表等基本数据结构以及递归的概念,并详细介绍了几种排序算法的实现方式。 #### 一、基本概念 **1.1 数据结构** - **栈(Stack)**: 栈是一种特殊的线性表,只能在一端进行插入或删除操作...

    数据结构与算法分析 C语言描述(原书第2版)课后习题参考答案

    数据结构与算法分析是计算机科学中的核心课程,它主要研究如何高效地组织和管理数据,以便于进行快速的检索、插入、删除等操作。C语言因其底层特性,常被用于实现这些复杂的数据结构和算法,使得理解更加直观,性能...

    数据结构与算法分析(Java版)

    ### 数据结构与算法分析(Java版):关键知识点解析 #### 一、书籍概述 《数据结构与算法分析(Java版)》是一本由Robert Lafore编写的关于数据结构和算法的专业书籍。该书旨在通过Java语言的具体示例来帮助读者...

    数据结构与算法分析C语言描述第二版英文版

    ### 数据结构与算法分析:C语言描述第二版 #### 知识点概览 1. **数据结构基础知识** - 定义与分类 - 基本操作与实现方式 - 时间复杂度与空间复杂度的概念 2. **算法分析** - 大O表示法 - 最佳、平均与最坏...

    数据结构与算法分析—c语言描述_课后答案

    根据提供的信息,《数据结构与算法分析—C语言描述》这本书主要涵盖了计算机科学中关于数据结构与算法的关键概念、原理及其实现方式,并提供了基于C语言的解决方案。此书旨在为学习者提供深入理解数据结构与算法的...

    数据结构与算法分析 第三版 C++

    ### 数据结构与算法分析 第三版 C++ #### 一、概览 《数据结构与算法分析 第三版 C++》是一本深入介绍计算机科学中核心主题——数据结构和算法的经典教材。本书通过C++语言来阐述各种数据结构的实现方法以及相关...

    《数据结构与算法分析C++描述第三版》答案

    根据提供的信息,《数据结构与算法分析C++描述第三版》答案这一资料主要涵盖了该教材中的大量练习题解答。为了更好地理解和应用数据结构与算法的知识,下面将从几个方面对该资料涉及的重要知识点进行深入探讨。 ###...

Global site tag (gtag.js) - Google Analytics