问题描述: 数组arr[0...mid-1]和arr[mid..n-1]是各自有序的,对数组arr[0..n-1]的两个有序段进行合并,得到arr[0..n-1]整体。要求空间复杂度为O(1) eg:{1,3,5,7,2,4,6}合并成{1,2,3,4,5,6,7} 思路: 方法一 很显然,看到这个 ...
分类:
编程语言 时间:
2016-08-01 20:56:46
阅读次数:
327
*****选择排序***** 方法描述:首先找到第一个最小的数,和第一个数交换;然后从剩下的找出最小的与第二个交换,以此类推。效率: 长度为N的数组,大约N2/2比较,N次交换特点: 1.运行时间和输入无关,有序数组,全部相等的数组,随机数组所用时间一样,没有充分利用输入的初始状态。 2.数据移动最 ...
分类:
编程语言 时间:
2016-07-30 19:53:47
阅读次数:
320
一、什么是归并排序 归并排序又称合并排序,它是成功应用分治技术的一个完美例子。对于一个需要排序的数组A[0..n-1],归并排序把它一分为二:A[0..n/2-1]和A[n/2..n-1],并对每个子数组递归排序,然后把这两个排好序的子数组合并为一个有序数组。下面是归并排序的例子图解: 二、单线程实 ...
分类:
编程语言 时间:
2016-07-23 12:08:49
阅读次数:
324
前面介绍了经典的数据结构和算法,这一节我们对这些数据结构和算法做一个总结,具体细节,请参见各个章节的详细介绍,这里我们用表格来呈现它们的效率。1. 数据结构部分数据结构中常用的操作的效率表通用数据结构查找 插入 删除遍历 数组O(N)O(1)O(N)—有序数组O(logN)O(N)O(N)O(N)链表O(N)O(1)O(N)—有序链表O(N)O(N)O(N)O(N)二叉树O(logN)O(log...
分类:
编程语言 时间:
2016-07-19 09:57:56
阅读次数:
179
1. Given an array of integers, return indices of the two numbers such that they add up to a specific target. 问题: 1.数组是否有序 2. 数组排序 方法1:O(n^2) 2. Two su ...
分类:
其他好文 时间:
2016-07-19 09:36:44
阅读次数:
101
创建一个有序的数组,之后从从无序数组中进行一个个插入,变成有序数组。 代码实现: ...
分类:
编程语言 时间:
2016-07-13 20:29:47
阅读次数:
165
二叉查找树支持将链表插入的灵活性和有序数组查找的高效性结合起来.数据结构由节点组成.节点包含的链接可以为null或者指向其他节点.在二叉树中,除了根节点以外,每个节点都有自己的父节点,且每个节点都只有左右两个链接,分别指向自己的左子节点和右子节点.因此可以将二叉查找树定义为一个空链接或者是一个有左右 ...
分类:
编程语言 时间:
2016-07-09 10:37:53
阅读次数:
326
与排序算法不同,搜索算法是比较统一的,常用的搜索除hash外仅有两种,包括不需要排序的线性搜索和需要排序的binary search。 首先介绍一下binary search,其原理很直接,不断地选取有序数组的组中值,比较组中值与目标的大小,继续搜索目标所在的一半,直到找到目标,递归算法可以很直观的 ...
分类:
其他好文 时间:
2016-07-08 21:52:29
阅读次数:
233
最近看一些算法题发现这些问题到最后落实到编程实现上都是一种基础的体现,包括对基本的for,if,else,while等语句的理解程度,还有对循环递归的理解。所以还是得回归最基本的算法,现在去学习那些高深复杂的DP,KMP,红黑树未免有点好高骛远。目前应该坚持基础,打好基础,毕竟不是CS科班出身。言归 ...
分类:
编程语言 时间:
2016-07-08 09:03:15
阅读次数:
186
有两个排序数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2,实现一个函数,把A2插入到A1,并且是有序的。 分析:从尾到头比较A1和A2的数字,并把较大的数字复制到合适的位置。 ...
分类:
编程语言 时间:
2016-07-05 20:39:23
阅读次数:
265