数组是应用最广泛的数据存储结构。它被植入到大部分的编程语言中,由于数组十分易懂,所以在这里就不赘述,主要附上两端代码,一个是普通的数组,另一个是有序数组。有序数组是按关键字升序(或降序)排列的,这种排列使快速查找数据项成为可能,即可以使用二分查找。 普通数组的Java代码: 有序数组的java代码: ...
分类:
编程语言 时间:
2016-11-28 15:39:34
阅读次数:
353
二分法查找: 『在有序数组的基础上通过折半方法不断缩小查找范围,直至命中或者查询失败。』 二分法的存储要求:要求顺序存储,以便于根据下标随机访问 二分法的时间效率:O(Log(n)) 二分法的空间效率:原地查询 O(1) 二分法对应的搜索树是确定的。 二叉排序树查找: 『借助二叉排序树进行搜索,但因 ...
分类:
编程语言 时间:
2016-11-27 23:04:08
阅读次数:
226
归并:将两个有序的数组归并成一个更大的有序数组。 归并算法:先(递归地)将它分为两半分别排序,然后将结果归并起来。 · 优点:保证将任意长度为N的数组排序所需时间和NlogN成正比; · 缺点:所需的额外空间和N成正比。 2.2.1 原地归并的抽象方法 public static void merg ...
分类:
编程语言 时间:
2016-11-26 02:56:48
阅读次数:
297
https://www.luogu.org/problem/show?pid=U4566 显然的逆序对,以前只是嘴巴ac,这次终于打了出来。 逆序对其实就是冒泡排序的排序次数。。。。但是一般的排序时间复杂度为O(n^2),于是都会想到归并排序。。。 一、二路归并 已知两个有序数组,将其归并为一个有序 ...
分类:
编程语言 时间:
2016-11-17 10:12:59
阅读次数:
258
/*
3.使用二分法查找有序数组中元素。找到返回索引,不存在输出-1。使用递归实现
*/
importjava.util.Scanner;
publicclassRecursion{
publicstaticvoidmain(String[]args)
{
System.out.println("请输入要找的整数");
Scannersc=newScanner(System.in);
intnum=sc.nex..
分类:
编程语言 时间:
2016-10-26 17:05:26
阅读次数:
258
From: http://blog.jobbole.com/73517/ 二分检索是查找有序数组最简单然而最有效的算法之一。现在的问题是,更复杂的算法能不能做的更好?我们先看一下其他方法。 有些情况下,散列整个数据集是不可行的,或者要求既查找位置,又查找数据本身。这个时候,用哈希表就不能实现O(1) ...
分类:
其他好文 时间:
2016-10-21 10:16:14
阅读次数:
197
1.简介 归并算法是递归地将数组分成两个小数组,分别对两个数组进行排序,然后合并两个有序数组,递归的终止条件是要合并的两个数组分别只有一个元素。 合并两个有序数组的算法为: 取两个输入数组A,B和一个输出数组C,以及三个计数器Aptr,Bptr,Cptr,分别指向三个数组的开始位置; 比较A[Apt ...
分类:
编程语言 时间:
2016-10-20 15:26:19
阅读次数:
170
一、什么是快速排序? 把一个无序的数组,第一趟排序后将数组分隔成两部分,若把前半部分和后半部分的相交元素称为中间元素。前半部分的所有元素小于中间元素,后半部分的所有元素大于中间元素。再对前半部分和后半部分分别进行上述递归操作。最终得到一个有序数组。 二、如何进行快速排序? 最近正好我在学习Go语言, ...
分类:
编程语言 时间:
2016-10-16 19:21:24
阅读次数:
139
There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. There are two sorted arrays A and B of siz ...
分类:
编程语言 时间:
2016-10-10 07:39:23
阅读次数:
228
最近做笔试题有这么一个关于二分查找的例子,有些疑惑。 给一个有序数组,和一个查找目标,用二分查找找出目标所在index,如果不存在,则返回-1-(其应该出现的位置),比如在0,6,9,15,18中找15,返回3;找10.则返回-4(-1-3) 实现如下: 但结果返回的是-2,也就是-1-1,调试发现 ...
分类:
编程语言 时间:
2016-09-17 23:34:01
阅读次数:
166