算法
文章平均质量分 68
菜鸟-北京
这个作者很懒,什么都没留下…
展开
-
经典排序算法(Java版)
http://blog.csdn.net/fenglibing/article/details/1756473权当复习,以备引用(理论来源于:http://www.zsqz.com/jsbase/Suanfa/index.html?defination.htm,感谢该网站。JAVA源码为我所写)1、冒泡排序 Bubble Sort最简单的排序方法是冒泡排序方法。这种方法的基转载 2016-04-01 03:24:09 · 244 阅读 · 0 评论 -
经典排序 图解 代码实现
一 插入排序1.1 直接插入排序基本思想:每次将一个待排序额记录按其关键码的大小插入到一个已经排好序的有序序列中,直到全部记录排好序。代码实现:[cpp] view plain copy //直接顺序排序 void InsertSort(int r[], int n) { for (int i=2转载 2016-09-23 07:43:29 · 434 阅读 · 0 评论 -
快速排序
原作者:啊哈磊注意:此文为转载文章,原文地址为:http://www.cnblogs.com/ahalei/p/3568434.html 这是我见过的解释快速排序最好的文章,分享如下: 假如我们的计算机每秒钟可以运行10亿次,那么对1亿个数进行排序,桶排序则只需要0.1秒,而冒泡排序则需要1千万秒,达到115天之久,是不是很吓人。那有转载 2016-09-23 07:30:59 · 415 阅读 · 0 评论 -
稳定性比较 时间复杂性比较
我们先看一段排序的例子把:这里有一个数组:12 45 342 2前面我弄的比较特别:是一个顺序的排列,而只有最后一个数不是有序的我们现在来排序,而这里只要排最后一个数对于插入排序来说,进行一趟排序之后就有: 2 12 45 342而对于冒泡排序,进行一趟排序之后有: 12 45 2 34转载 2016-09-23 06:36:36 · 749 阅读 · 0 评论 -
排序时间复杂度
原创 2016-09-23 06:18:38 · 421 阅读 · 0 评论 -
堆排序
堆是一种完全二叉树结构,并且其满足一种性质:父节点存储值大于(或小于)其孩子节点存储值,分别称为大顶堆、小顶堆。堆一般采用数组进行存储(从下标为1开始),则父节点位置为i,那么其左孩子为2*i,右孩子为2*i + 1。一. 算法描述堆排序主要分为两个过程:(1)先使长度为N数组形成一个N个节点组成的大顶堆(2)然后将堆顶数据与末尾数据交换,再对N-1长的堆调整为大顶堆;转载 2016-09-20 02:29:41 · 259 阅读 · 0 评论 -
堆排序
二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆。下图展示一个最小堆:由于其它转载 2016-09-20 02:26:40 · 215 阅读 · 0 评论 -
队列
队列 (queue) ,基本数据结构之一,属于FIFO(先进先出)数据结构。队列只允许在前端 (HEAD) 进行入队(插入)操作,只允许在后端 (TAIL) 进行出队(删除)操作。单队列可以使用链表来实现,实现非常简单,队列的长度也没有限制,但是插入和读取的时间代价较高。循环队列可以使用数组来实现,因此操作起来很快,但是长度一般固定。但是可以通过设计一个扩大容量的方法来使其长度转载 2016-09-20 02:09:31 · 291 阅读 · 0 评论 -
简单数据结构实现——二叉查找树
二叉查找树(Binary Search Tree)具有以下基本性质:1.若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值;2.若它的右子树不空,则右子树上所有结点的值均大于它的根节点的值;3.它的左右子树也分别为二叉排序树。通常采取二叉链表作为二叉排序树的存储结构。在java中构造了如下的记node类来代表单个节点:[java] view p转载 2016-09-20 01:53:52 · 348 阅读 · 0 评论 -
希尔排序
插入排序的算法复杂度为O(n2),但如果序列为正序可提高到O(n),而且直接插入排序算法比较简单,希尔排序利用这两点得到了一种改进后的插入排序。一. 算法描述希尔排序:将无序数组分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序;然后再选择一个更小的增量,再将数组分割为多个子序列进行排序......最后选择增量为1,即使用直接插入排序,使最终转载 2016-09-20 01:51:19 · 203 阅读 · 0 评论 -
归并排序
归并排序(Merge Sort) 是一种采用了分治(Divide and Conquer) 想法的排序算法。该算法中基本的操作是合并两个已经排序的表,并将输出放到第三个表中,该过程可以通过对输入数据一趟排序来完成。基本的合并算法是取两个输入数组A和B,一个输出数组C,与三个计数器Actr,Bctr,Cctr,它们初始置于对应数组的开始端。A[Actr]和B[Bctr]中的较小者转载 2016-09-20 01:13:25 · 223 阅读 · 0 评论 -
插入排序
插入排序 Insertion Sort 为基本排序算法之一。其工作原理是将数组的后端保留为无序序列区,在前端从前往后逐渐建立有序序列区。每一次挑出后半部分无序区的第一个元素作为当前操作元素,然后从该位置向前逐个扫描,找到正确的位置进行插入,是为插入排序。在从当前位置向前扫描的过程中,如果还没有抵达正确位置,则需要有一个元素向后挪位的操作,即代码中的a[j]=a[j-1], 这是插入排序转载 2016-09-20 00:58:09 · 222 阅读 · 0 评论 -
冒泡排序(Bubble Sort)
原理:比较两个相邻的元素,将值大的元素交换至右端。思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。举例说明:要排序数组:int[] arr={6,3,8,2,9,1}; 第一趟排转载 2016-09-20 00:26:09 · 265 阅读 · 0 评论 -
选择排序
冒泡排序冒泡排序比较好理解,但是效率比较低,冒泡排序的基本思想是:每一次将最具有特征的一个数(或者object)放到序列的最前面,或者最后面。例如,如果需要将一组数,以从小到大的顺序排列,那么就可以设计这样的冒泡方法:可以设计从序列的最后面开始,找出序列中最小的一个数放到序列的最前面,这样经过n次循环也可以实现数组的排列。这种排序方法由于每一次找到的数字都像是气泡一样从数组转载 2016-09-20 00:15:12 · 164 阅读 · 0 评论 -
Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序、希尔排序) 2)交换排序(冒泡排序、快速排序) 3)选择排序(直接选择排序、堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快转载 2016-04-11 18:36:07 · 291 阅读 · 0 评论 -
JAVA面试题4
JAVA面试题网上找到一些JAVA面试题,不过,不管是不是面试题,有些时候在闲了下来的看一看,或许或以找到自己技术上的不足点。有一些是有答案的,有一些是没有答案自己做的。放在这里,放便自己,方便大家。1、编写一个方法,这个方法搜索一个字符数组中是否存在某个字符,如果存在,则返回这个字符在字符数组中第一次出现的位置(序号从0开始计算),否则,返回-1。要搜索的字符数组和字符都以参数形式传递传转载 2016-04-01 03:26:30 · 298 阅读 · 0 评论 -
二分法查找法
算法如下:1.确定查找范围front=0,end=N-1,计算中项mid=(front+end)/2。2.若a[mid]=x或front>=end,则结束查找;否则,向下继续。3.若a[mid]x,说明待查找的元素值只可能在比中项元素小的范围内,则把mid-1的值赋给end,并重新计算mid,转去执行步骤2。http://www.cnblogs.com/yc_sunniwell/a转载 2016-09-23 15:53:19 · 629 阅读 · 0 评论