一. 什么是二分查找
二分查找又称为折半查找,该算法的思想是将数列按序排列,采用跳跃式方法进行查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。以此类推不断缩小搜索范围。
二. 二分查找的条件
二分查找的先决条件是查找的数列必须是有序的。
三. 二分查找的优缺点
优点:比较次数少,查找速度快,平均性能好;...
分类:
编程语言 时间:
2014-07-22 23:00:14
阅读次数:
512
四、递归 递归是函数调用自身的一种特殊的编程技术,其应用主要在以下几个方面: 阶乘
在java当中的基本形式是: Public void mothed(int n){//当满足某条件时: Mothed(n‐1); } 递归二分查找
Java二分查找实现,欢迎大家提...
分类:
编程语言 时间:
2014-05-10 20:13:19
阅读次数:
380
1 #include 2 #include 3 4 void MerageSort(int *A,
int low, int high); 5 void Merge(int *A, int low, int middle, int high); 6 7 int
main() 8 { ...
分类:
其他好文 时间:
2014-05-04 20:44:56
阅读次数:
417
剑指offer上的第一道题目,在九度OJ上测试通过
题目描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
输入:
输入可能包含多个测试样例,对于每个测试案例,
输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和列数。
输入的第二行包括一个整数t(1<=t<=1000000):代表要查找的数字。
接下来的m行,每行有n个数,代表题目所给出的m行n列的矩...
分类:
其他好文 时间:
2014-05-04 18:26:36
阅读次数:
348
void Merge(int A[],int p,int q,int r){
int i,j,k;
//计算子数组A[p..q]的元素个数
int n1 = q - p + 1;
//计算子数组A[q+1..r]元素个数
int n2 = r - q;
//创建子数组L,R
int* L = (int*)malloc(sizeof(int)*...
分类:
其他好文 时间:
2014-05-04 12:44:38
阅读次数:
384
在我们日常的程序开发时候,有时候需要对一个已知的集合按照一定的规则进行排序,其实当数据的规模不太大时或者数据的有序特征比较明显,其实我们可以采用其它的排序算法例如:Bubble
Sort, Insertion Sort , Shell Sort 等。 但是前面3中算法的共同特点是,都是从原始的列表里...
分类:
Web程序 时间:
2014-05-04 10:19:22
阅读次数:
337
归并排序
在提高排序算法性能的方法中,有一类叫做分而治之。我们先研究其中第一种叫做归并排序。归并排序使用递归的方法,不停地把列表一分为二。如果列表是空或只有一个元素,那么就是排好序的(递归基点),如果列表有超过1个的元素,那么切分列表并对两个子列表递归使用归并排序。一旦这两个列表排序完成,称为“归并”的基本操作开始执行。归并是把两个有序列表合并成一个新的有序列表的过程。图10是我们熟悉的列表...
分类:
编程语言 时间:
2014-05-01 22:18:22
阅读次数:
391
题目大意:先给定n个数字,现在要求算出这n个数字的两两之和保存到sum数组,然后在给定m个数,要求找到和每一个数最接近的sum[i];
挨个计算每个属于其他数之间的sum,然后排序;
查找时有两种方法:二分查找&&双向查找;当然二分查找的效率比后者高了很多,但是都能AC。
提供一条新思路,并不一定非要用二分。
双向查找:
#include
#include
#include
using ...
分类:
其他好文 时间:
2014-05-01 18:43:34
阅读次数:
256
主定理
主定理最早出现在《算法导论》中,提供了分治方法带来的递归表达式的渐近复杂度分析。
规模为n的问题通过分治,得到a个规模为n/b的问题,每次递归带来的额外计算为c(n^d)
T(n) <= aT(n/b)+c(n^d)
那么就可以得到问题的复杂度为:...
分类:
其他好文 时间:
2014-04-30 22:44:38
阅读次数:
435