算法集锦
宝贝霞霞
这个作者很懒,什么都没留下…
展开
-
排序算法的稳定性
排序算法的稳定性是指:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。 快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法原创 2012-02-24 11:38:51 · 325 阅读 · 0 评论 -
归并排序算法的java实现
归并排序算法基本思想:将待排序的序列(共n个元素)看成n个子序列,然后依次合并相邻的两个子序列,直至变成一个整体有序序列;特点:稳定排序,非原地排序,时间复杂度O(nlogn);算法实现:public class MergeSort { public int[] merge(int[] a,int[] b){ int al=a.length; int bl=b.leng原创 2012-02-24 17:30:53 · 305 阅读 · 0 评论 -
直接插入排序算法的思想及java实现
基本思想:把n个待排序的元素看成一个有序表和一个无须表,开始时有序表只包含一个元素,无序表中包含n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表的适当位置,使之成为新的有序表,重复n-1次可完成排序。 适用的场景:当数据已基本有序时,采用插入排序可以明显减少数据交换和数据移动的次数,进而提高排序效率。 特点:稳定排序,原地排序,时间复杂度O(n^2)。原创 2012-03-04 12:14:27 · 588 阅读 · 0 评论 -
冒泡排序java实现
基本思想:将待排序的n个元素垂直排成一列,依次比较上下相邻的两个元素,如果上面的数大于下面的,则两者交换,第一趟冒泡排序的结果使得关键字最大的记录被放在最后一个位置上,然后第二趟起泡排序对前n-1个记录进行同样操作,结果是关键字次大的记录被安放在第n-1个位置上,以此类推共进行n-1趟排序。 特点:稳定排序,时间复杂度O(n^2). 算法实现:public class Bu原创 2012-03-04 16:38:37 · 280 阅读 · 0 评论 -
堆排序算法的java实现
思想:堆排序分为小顶堆和大顶堆,小顶堆满足Ki=K(2i)且Ki>=K(2i+1).将此序列所存储的向量R[1......n]看做一棵完全二叉树的存储结构,则堆实际上满足如下性质的完全二叉树:树中任一非叶子节点的关键字均不大于(或不小于)其左右的孩子节点的关键字。特点:非稳定排序,原地排序,时间复杂度O(nlogn),空间复杂度O(n)。java实现:public class原创 2012-04-17 22:59:29 · 420 阅读 · 0 评论