
算法分析
文章平均质量分 79
bbewx
这个作者很懒,什么都没留下…
展开
-
算法基础篇之顺推法实例——fibonacci数列
题目:13世纪初,欧洲数学家斐波那契在他的著作《suan原创 2014-04-28 23:25:06 · 1279 阅读 · 0 评论 -
求逆序数对个数(微软2010年笔试题)
题目:在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序数对。一个排列中逆序的总数就称为这个排列的逆序数。如{2,4,3,1}中,2和1,4和3,4和1,3和1是逆序数对,因此整个数组的逆序数对个数为4,现在给定一数组,要求统计出该数组的逆序数对个数。原创 2014-04-22 22:40:55 · 3952 阅读 · 0 评论 -
找重复元素(google面试题)
题目:一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空间和O(n)时间。转载 2014-04-24 09:50:53 · 1044 阅读 · 0 评论 -
数据结构之链表单向操作总结
链表是数据结构的基础内容之一,下面就链表操作中的创建链表、打印链表、求取链表长度、判断链表是否为空、查找结点、插入结点、删除结点、逆转链表、连接链表、链表结点排序等进行总结。1.创建表示结点的类,因为链表操作中需要比较结点,因此结点需要实现comparable接口。public class Node implements Comparable { private Object data;原创 2014-05-16 13:35:29 · 1453 阅读 · 0 评论 -
数据结构之循环链表
循环链表是数据结构中链表的一种形式。相对于单向链表,原创 2014-05-16 23:28:25 · 2100 阅读 · 0 评论 -
数据结构之图的深度优先搜索
下面来讲一下图的深度优先搜索的方法:原创 2014-05-11 11:02:18 · 2306 阅读 · 2 评论 -
数据结构之图的广度优先搜索
遍历原则:从图中指定的原创 2014-05-11 22:46:10 · 2095 阅读 · 0 评论 -
数据结构之堆栈的链式存储
在数据结构之堆栈的顺序存储一文中,原创 2014-05-18 10:54:31 · 1592 阅读 · 0 评论 -
数据结构之堆栈的顺序存储
堆栈作为线性表的t原创 2014-05-17 23:58:32 · 2225 阅读 · 0 评论 -
数据结构之双向链表(包含双向循环链表)
双向(循环)链表是线性表的链式存储结构的又一种形式。在之前已经讲述了单向链表和循环链表。相比于单向链表只能从头结点出发遍历整个链表的局限性,循环链表使得可以从任意一个结点遍历整个链表。但是,不管单向链表也好,循环链表也罢,都只能从一个方向遍历链表,即只能查找结点的下一个结点(后继结点),而不能查找结点的上一个结点(前驱结点)。鉴于上述问题,引入了双向链表。由于双向循环链表包含双向链表的所有原创 2014-05-17 21:05:56 · 2726 阅读 · 0 评论 -
数据结构之队列的顺序存储
队列是线性表的一种特殊原创 2014-05-19 22:25:43 · 1058 阅读 · 0 评论 -
排序算法之七大排序算法总结
首先回顾下各种排序的主要思路:一. 冒泡排序冒泡排序主要思路是:通过交换使相邻的两个数变成小数在前大数在后,这样每次遍历后,最大的数就“沉”到最后面了。重复N次即可以使数组有序。冒泡排序改进1:在某次遍历中如果没有数据交换,说明整个数组已经有序。因此通过设置标志位来记录此次遍历有无数据交换就可以判断是否要继续循环。冒泡排序转载 2014-04-21 22:08:28 · 790 阅读 · 0 评论 -
最小堆操作(元素的添加和删除)
public interface HeapOperation { int[] addNumber(int[] array, int length, int num); int[] deleteNumber(int[] array, int length);}原创 2014-04-19 18:46:39 · 10113 阅读 · 0 评论 -
算法基础篇之逆推法实例——该存多少钱
大家一定都经历过存钱的过程,比如我今天cun原创 2014-04-29 22:44:38 · 1741 阅读 · 1 评论 -
算法基础篇之穷举法实例——填数游戏
在小学奥数题中,经常会看到一些填数字游戏,其中每个汉字都表示一个不同的数字,原创 2014-04-30 15:28:54 · 5042 阅读 · 0 评论 -
排序算法之冒泡排序
冒泡排序是非常容易理解和实现,,以从小到大排序举例:设数组长度为N。1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。3.N=N-1,如果N不为0就重复前面二步,否则排序完成。 按照定义很容易写出代码:[cpp]转载 2014-04-16 21:47:50 · 547 阅读 · 0 评论 -
排序算法之插入排序
直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。 设数组为a[0…n-1]。1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=12. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。转载 2014-04-16 21:52:22 · 512 阅读 · 0 评论 -
排序算法之快速排序
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速转载 2014-04-16 22:00:34 · 512 阅读 · 0 评论 -
排序算法之希尔排序
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很转载 2014-04-16 22:48:34 · 563 阅读 · 0 评论 -
排序算法之直接选择排序(内附交换两个数据交换的正确实现方法)
直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接播放排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。 设数组为a[0…n-1]。1. 初始时,数组全为无序区为a[0..n-1]。令i=02. 在无序区a[i…n-1]中选取一个最小的元素,将其转载 2014-04-16 22:56:37 · 718 阅读 · 0 评论 -
排序算法之归并排序
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。[cpp] view plaincopy转载 2014-04-17 22:08:08 · 717 阅读 · 0 评论 -
数据结构之图的邻接表元素的删除
上节内容讲解了图的邻接表的创建,li原创 2014-05-05 23:34:21 · 11545 阅读 · 2 评论 -
排序算法之堆排序
堆排序与一样都是时间复杂度为O(N*logN)的几种常见排序方法。原创 2014-04-20 23:01:08 · 658 阅读 · 0 评论 -
二叉树的前序遍历、中序遍历和后序遍历的递归和非递归算法
本文对二叉树的前序遍历、中序遍历、后原创 2014-05-25 12:11:59 · 1103 阅读 · 0 评论