二分搜索,也称二分查找、折半搜索,是一种在有序数组中查找特定元素的搜索算法。搜索从数组的中间元素开始,如果中间元素刚好是要查找的元素,则搜索结束,如果要查找的特定元素大于(小于)中间元素,则在数组大于(小于)中间元素的一半中查找。该算法的递归实现比较容易理解,思路更清晰,但效率方面仍有提高的空间。代...
分类:
其他好文 时间:
2014-11-07 11:15:04
阅读次数:
171
堆排序堆排序是直接选择排序的一种改进算法,先将数组调整成一个堆,在将堆第一个元素最小元素和待排序区间最后一个元素交换。重新调整堆,重复执行n - 1次即可得到有序数组具体解释代码注释中有说明,注意完全二叉树的性质如i节点的左子树节点为2 * i是从1开始,不是从0开始。实现的时候需要注意一下Heap...
分类:
编程语言 时间:
2014-11-07 00:53:08
阅读次数:
259
归并排序重点在治,即合并两个有序数组: 1 void merge(int A[], int p, int q, int r) 2 { 3 int i = 0, j = 0, k = p; 4 int m = q - p + 1; 5 int n = r - q; 6 ...
分类:
编程语言 时间:
2014-11-06 19:38:23
阅读次数:
198
在前面的系列文章中,依次介绍了基于无序列表的顺序查找,基于有序数组的二分查找,平衡查找树,以及红黑树,下图是他们在平均以及最差情况下的时间复杂度:可以看到在时间复杂度上,红黑树在平均情况下插入,查找以及删除上都达到了lgN的时间复杂度。那么有没有查找效率更高的数据结构呢,答案就是本文接下来要介绍了散...
分类:
编程语言 时间:
2014-10-31 23:36:25
阅读次数:
387
数组在有序的情况查找某元素,用二分查找可以达到logn的时间复杂度。二分查找虽然看似容易,想要把这个算法完全写好,并灵活运用确并非易事儿。据说专业的程序员有90%的人无法正确实现。如果你不信,不妨自己动手试一试,然后用一些测试用例测一下。二分查找的思想:在有序数组A[n]中查找x,令s=0,e=n-...
分类:
其他好文 时间:
2014-10-31 21:48:28
阅读次数:
143
There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time
complexity should be O(log (m+n)).
题意:寻找两个有序数组的中位数,要求复杂度为O(log
(m+...
分类:
其他好文 时间:
2014-10-29 22:23:33
阅读次数:
226
Given two sorted integer arrays A and B, merge B into A as one sorted array.Note:You may assume that A has enough space (size that is greater or equal...
分类:
编程语言 时间:
2014-10-29 16:22:58
阅读次数:
209
Follow upfor "Find Minimum in Rotated Sorted Array":What ifduplicatesare allowed?Would this affect the run-time complexity? How and why?Suppose a sort...
分类:
编程语言 时间:
2014-10-21 17:04:11
阅读次数:
226
1,给定一个有序数组values,求任意一个i使得values[i]等于v,不存在返回-1int search(int* values,int len,int key){ if(!values || len key) high=mid-1; else low = mid +1; ...
分类:
编程语言 时间:
2014-10-20 11:31:24
阅读次数:
215
https://oj.leetcode.com/problems/remove-duplicates-from-sorted-array/用一个cnt记录不重复的部分,后面每遇到不重复的cnt++即可。class Solution {public: int removeDuplicates(i...
分类:
编程语言 时间:
2014-10-20 03:23:10
阅读次数:
241