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));
}
}
分享到:
相关推荐
四、算法分析与设计 102 1.常用的算法设计方法: 102 1.1 迭代法: 102 1.2 穷举搜索法: 103 1.3 递推法: 104 1.4 递归法 106 1.5 贪婪法 111 1.6 分治法 113 1.7 动态规划法 115 1.8 回溯法 119 1.9 分支定界法...
讲述了数据结构中的几种查找算法,比如二分查找算法等,分析了其平均长度,时间以及空间开销
数据结构和算法是程序设计的核心,一个程序设计的好不好,除了程序界面漂亮不漂亮...常用的数据结构有几十种,算法更是无处不在!我们要学会使用已经设计好的数据结构和算法,更要学会设计我们自己的数据结构和算法。
在本次实验中将数据量提到5万的时候,该类算法运行时间仍在几毫秒左右,而上面的3种算法运行时间已经到达十几秒左右,效率相差已经到达万倍。该类算法的运行时间随着数据的增加,运行时间渐近线性的增加。但注意理论...
《数据结构与算法分析>是数据结构和算法分析的经典教材,书中使用主流的程序设计语言C++作为具体的实现语言。书的内容包括表、栈、队列、树、散列表、优先队列、排序、不相交集算法、图论算法、算法分析、算法设计、...
几种简单排序之间的比较 小结 问题 实验 编程作业 第4章 栈和队列 不同的结构类型 栈 队列 优先级队列 解析算术表达式 小结 问题 实验 编程作业 第5章 链表 链结点(Link) LinkList专题Applet ...
这几种排序算法是在顺序存储结构上实现的,因此在排序过程中需要进行大量记录的移动。当记录很大时,时间耗费很大,此时可采用静态链表作存储结构。但是有的排序方法,无法实现表排序。在这种情况下可以进行地址...
本篇介绍了数据结构的算法,很全面!五子棋算法 ============================================================================= 任何一种棋类游戏其关键是对当前棋局是否有正确的评分,评分越准确则电脑的AI越高...
对各种排序算法的一个总结,分析了几种常用算法的思想和实现过程。
设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。 【基本要求】 (1)实现各种内部排序。包括冒泡排序,直接选择排序,希尔排序,快速排序,堆排序。 (2) 待排序的元素的关键字为整数...
介绍了几种比较的算法,包括一些数据结构的介绍,还是很不错的。
大数据-算法-分组密码算法几种分析模型的研究陈怀凤.pdf
绪 论 1.1 什么是数据结构 1.2 基本概念和术语 1.3 抽象数据类型的表示与实现 1.4 算法和算法分 1.4.1 算法 1.4.2 算法设计的要求 1.4.3 算法效率的度量 1.4.4 算法的存储空间的需求 计算机系数据结构与算法设计全文...
56.7 几种循环的比较 79 6.8 break 和 continue语句 79 6.8.1 break 语句 79 6.8.2 continue 语句 80 6.9 程序举例 81 7 数组 7.1 一维数组的定义和引用 82 7.1.1 一维数组的定义方式 82 7.1.2 一维数组元素的引用 ...
外部媒体上的数据结构作为几章中的最后论题来讨论。 第5章是相对较短的一章,主要讨论散列表。这里进行了某些分析,本章末尾讨论了可扩散列。 第6章是关于优先队列的。二叉堆也在这里讲授,还有些附加的材料论述...
对数据结构中几种典型的内部排序作比较,实习报告
数据结构课程设计(内部排序算法比较_C语言) 数据结构课程设计(内部排序算法比较_C语言)
排序的基本概念以及其算法的种类,介绍几种常见的排序算法的算法:冒泡...在研究学习了之前几种排序算法的基础上,讨论发现一种新的排序算法,并通过了进一步的探索,找到了新的排序算法较之前几种算法的优势与不足。
56.7 几种循环的比较 79 6.8 break 和 continue语句 79 6.8.1 break 语句 79 6.8.2 continue 语句 80 6.9 程序举例 81 7 数组 7.1 一维数组的定义和引用 82 7.1.1 一维数组的定义方式 82 7.1.2 一维数组元素的引用 ...
数据结构报告,包括插入排序(直接插入排序、希尔排序),交换排序(起泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序、分配排序的基本思想、复杂度分析以及稳定行分析。