代码改变世界

随笔分类 -  数据结构和算法

二分查找

2015-03-12 14:18 by itwolf, 209 阅读, 收藏,
摘要: 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。C++源代码: 1 // 二分查找.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h"... 阅读全文

转:归并排序

2015-03-12 13:04 by itwolf, 243 阅读, 收藏,
摘要: 声明:本文转载自:MoreWindows 的白话经典算法系列之五 归并排序的实现。原文的链接:http://blog.csdn.net/morewindows/article/details/6678165归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Co... 阅读全文

散列表(哈希表)

2015-01-05 15:32 by itwolf, 339 阅读, 收藏,
摘要: 序言:如果将一系列的记录按照关键字的某种函数存储,那么在查找某个数据的时候就可以直接通过关键字计算出来了,而不在需要“比较”,这样会非常高效,这就是散列技术。所以散列技术就是: 存储位置=f(关键字) 不管是记录的存储还是查找,都用这种方法散列技术具有很高的效率,但是使用起来有一些限制。如1个关键字... 阅读全文

转载:最小生成树-Prim算法和Kruskal算法

2014-12-31 09:40 by itwolf, 242 阅读, 收藏,
摘要: 本文摘自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html最小生成树-Prim算法和Kruskal算法Prim算法1.概览普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索... 阅读全文

二叉排序树和平衡二叉树

2014-12-24 11:18 by itwolf, 1457 阅读, 收藏,
摘要: 二叉排序树又称二叉查找树或二叉搜索树。 它一棵空树或者是具有下列性质: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;查找的时候总是从根节点进行比较然后逐级往下进行。由于它是一种树形... 阅读全文

堆排序

2014-12-23 09:39 by itwolf, 223 阅读, 收藏,
摘要: 堆排序是对简单选择排序算法的一种改进,在每次选择最小记录的同时,根据比较结果对其他记录做出相应的调整。堆是具有下列性质的完全二叉树:每个节点的值都大于(小于)或者等于其左右孩子节点的值,为大顶堆(小于)。堆排序的基本思想是:从最后一个含有叶子节点的节点开始将待排序列构造成一个堆,然后将堆顶元素与末尾... 阅读全文

快速排序

2014-12-22 10:28 by itwolf, 307 阅读, 收藏,
摘要: 如果说希尔排序是简单插入排序的升级,堆排序是简单选择排序的升级,那么快速排序就是冒泡排序的升级了。相对于冒泡排序,快速排序增大了记录比较和移动的距离,将关键字较大的记录移动到后面,较小的移动到前面,从而减少总的比较和移动次数。快速排序的基本思想:通过每一趟排序都将待排序的记录按照选定的关键字分成两部... 阅读全文

递归程序设计

2014-12-21 10:28 by itwolf, 320 阅读, 收藏,
摘要: 一般定义: 程序调用自身的编程技巧称为递归(recursion)。递归做为一种算法设计技巧,是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象。递归过程总是一个过程还未执行完就执行另一个过程(但是执行另一过程前会保存未执行完时候的变量值),如此反复,一直执行到边界条件,执行完余下的... 阅读全文

希尔排序

2014-12-17 13:47 by itwolf, 275 阅读, 收藏,
摘要: 1、希尔排序介绍希尔排序是对直接插入排序算法的一种改进,当记录较少或者记录本身基本有序的时候直接插入排序的优势非常明显,所以希尔排序就是通过人为的创造这两个条件,然后进行插入排序,基本思想是设置一个增量increment,然后将原始记录“看成”increment组数据,并对每组数据进行直接插入排序,... 阅读全文