- 博客(11)
- 资源 (19)
- 收藏
- 关注
原创 基数排序
基数排序(Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。比较官方地说,基数排序是一种基于多关键字的排序。基数排序具体过程如下: 将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。 然后,从最低位开始,依次进行一次排序。这个排序并非比较大小,而是将对应的数字放置在其对应的桶中。即个位数字是0的数字放置在索引为0的
2017-05-25 19:54:30 759
原创 归并排序
归并排序采用分而治之(divide and conquer)的思想,通过将已经排好序的子序列合并,得到最终完全有序的序列。所以归并算法包括两大步骤:第一步是“分割”,第二步是“合并”,即先对原始序列进行分割排序,使每个子序列有序,然后再通过合并使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。二路归并的过程大致如下:归并过程为:比较a[i]和b[j]的大小,若a[i]≤b[j],则将第
2017-05-25 14:24:39 710
原创 使用graphviz绘制二叉树(二)
在上一篇博客中《使用graphviz绘制二叉树》,提到了一些graphviz的简单的用法。可是如果用上一篇文章中介绍的方法绘制二叉树的话,画出来是及其丑陋的,子节点位置摆放不太好看。自己可以动手试试! 比如我编写了一个tree.dot文件:graph g { graph[ordering="out"]; A--B; A--C; B--D; B--E;
2017-05-12 20:55:00 5984 7
原创 使用graphviz绘制二叉树
Graphviz是开源免费跨平台图形绘制工具,使用其提供的dot语法,可以很方便的用来绘制“图”结构(这里的图可以理解为是数学上或者计算机科学中所说的图),并支持多种格式输出。语法首先,来简单看一下dot语法。 1. 使用digraph关键字定义有向图,使用->表述节点之间的关系。如: (g是图的名称,a,b,c是三个节点)digraph g { a->b; b->c; c->a;
2017-05-12 15:23:44 10009 1
原创 堆排序
堆排序采用的数据结构是完全二叉树,所以在介绍堆排序之前,我们先看看完全二叉树的定义及性质。定义一:只有最下面的两层结点度能够小于 22,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。定义二:若设二叉树的深度为 hh,除第 hh 层外,其它各层 (1~h−1)(1~h-1) 的结点数都达到最大个数,hh 层所有的结点都连续集中在最左边,这就是完全二叉树。 完全二叉树是由满二叉树而引出来的
2017-05-11 21:34:18 703
原创 直接选择排序
选择排序是一种简单直观的排序算法。其基本思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。经典的选择排序算法有:直接选择排序和堆排序。下面是直接选择排序的Java实现:// 交换数组中的两个元素public static void swap(int[] numbers, int i, int j) {
2017-05-11 17:57:36 626
原创 常见排序算法
注:点进链接查看算法具体实现!!!插入排序直接插入排序希尔排序交换排序冒泡排序快速排序选择排序直接选择排序堆排序归并排序基数排序总结 注:图片来自网络,侵权删!
2017-05-11 17:25:58 506
原创 希尔排序
希尔排序是对直接插入排序的改进,其实质就是分组插入排序,该方法又称缩小增量排序。 该算法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的一系列元素组成)分别进行直接插入排序,然后依次缩减增量再进行排序,直到增量为1(即对全体数据元素进行一次直接插入排序)。 希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快
2017-05-11 17:12:13 555
原创 直接插入排序
插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。经典的插入排序算法有直接插入排序和希尔排序。 直接插入排序的基本思想是:将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。 图示如下(自百度图片,若有侵权,请告知): Java代码
2017-05-11 15:34:42 579
原创 冒泡排序
冒泡排序应该算是最简单的排序算法了,其过程如下: 1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3. 针对所有的元素重复以上的步骤,除了最后一个。 4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。Java版本实现:public class So
2017-05-10 21:50:34 680
原创 快速排序算法
快速排序算法的基本思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。我们来看看一趟排序中如何将数据划分为两部分,使得左边部分比给定元素小,而右边部分比给定元素大。 首先,我们选定一个数字作为中轴元素用于划分数据,我们选择数据的第一个元素。 然
2017-05-10 17:56:50 997
Android编程权威指南
2015-03-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人