算法
文章平均质量分 77
techlgwjda
这个作者很懒,什么都没留下…
展开
-
二分查找算法
二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为O(n).但二分查找算法则更优,因为其查找时间为O(lgn),譬如数组{1, 2, 3, 4, 5, 6, 7, 8, 9},查找元素6,用二分查找的算法执行的话,其顺序为: 1.第一步查找中间元素,即5,由于5 2.寻找{6, 7, 8,转载 2013-10-24 08:49:20 · 773 阅读 · 0 评论 -
Java 采用DES 加密和解密源码
Java密码学结构设计遵循两个原则: 1) 算法的独立性和可靠性。 2) 实现的独立性和相互作用性。 算法的独立性是通过定义密码服务类来获得。用户只需了解密码算法的概念,而不用去关心如何实现这些概念。实现的独立性和相互作用性通过密码服务提供器来实现。密码服务提供器是实现一个或多个密码服务的一个或多个程序包。软件开发商根据一定接口,将各种算法实现后,打包成一个提供器,用户可以安装不同的提转载 2014-12-29 20:42:34 · 725 阅读 · 0 评论 -
Java排序算法(八):希尔排序(Shell排序)
Java排序算法(八):希尔排序(Shell排序)希尔排序(缩小增量法) 属于插入类排序,由Shell提出,希尔排序对直接插入排序进行了简单的改进:它通过加大插入排序中元素之间的间隔,并在这些有间隔的元素中进行插入排序,从而使数据项大跨度地移动,当这些数据项排过一趟序之后,希尔排序算法减小数据项的间隔再进行排序,依次进行下去,进行这些排序时的数据项之间的间隔被称为增量,习惯上用字母h来表示转载 2014-08-23 18:15:13 · 471 阅读 · 0 评论 -
Java排序算法(三):堆排序
Java排序算法(三):堆排序堆积排序(Heapsort)是指利用堆积树(堆)这种资料结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素。堆排序是不稳定的排序方法,辅助空间为O(1), 最坏时间复杂度为O(nlog2n) ,堆排序的堆序的平均性能较接近于最坏性能。 堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征,使得在当前无序区中选取最大(或最转载 2014-08-23 18:09:35 · 504 阅读 · 0 评论 -
算法的稳定性
若待排序的序列中,存在多个具有相同关键字的记录,经过排序, 这些记录的相对次序保持不变,则称该算法是稳定的;若经排序后,记录的相对 次序发生了改变,则称该算法是不稳定的。 假定在待排序的记录序列中,存在多个具有相同键值的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ki=kj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的转载 2014-08-25 17:11:43 · 591 阅读 · 0 评论 -
Java排序算法(十二):总结
Java排序算法(十二):总结前面讲了10种基本的排序算法,现在来作下总结,基于下面几个方面来比较各个排序算法的优劣:时间复杂度,空间复杂度,稳定性,适用场景排序算法时间复杂度空间复杂度稳定性适用场景直接选择排序O(n^2)O(1)不稳定时间效率不高,但是空间效率很高,算法实现比较简单堆排序O(nlogn),底数为转载 2014-08-23 18:19:09 · 419 阅读 · 0 评论 -
Java排序算法(十一):基数排序
Java排序算法(十一):基数排序基数排序已经不再是一种常规的排序方式,它更多地像一种排序方法的应用,基数排序必须依赖于另外的排序方法。基数排序的总体思路就是将待排序数据拆分成多个关键字进行排序,也就是说,基数排序的实质是多关键字排序。多关键字排序的思路是将待排数据里德排序关键字拆分成多个排序关键字;第1个排序关键字,第2个排序关键字,第3个排序关键字......然后,根据子关键字对待排序转载 2014-08-23 18:18:24 · 423 阅读 · 0 评论 -
Java排序算法(七):折半插入排序
Java排序算法(七):折半插入排序折半插入排序法,又称二分插入排序法,是直接插入排序法的改良版,也需要执行i-1趟插入,不同之处在于,第i趟插入,先找出第i+1个元素应该插入的的位置,假定前i个数据是已经处于有序状态。代码实现:[java] view plaincopyprint?package sort; public class BinaryInse转载 2014-08-23 18:12:40 · 522 阅读 · 0 评论 -
Java排序算法(九):归并排序
Java排序算法(九):归并排序归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有转载 2014-08-23 18:14:33 · 439 阅读 · 0 评论 -
Java排序算法(六):直接插入排序
Java排序算法(六):直接插入排序直接插入排序的基本操作就是将待排序的数据元素按其关键字值的大小插入到前面的有序序列中。直接插入的时间效率并不高,如果在最坏的情况下,所有元素的比较次数总和为(0+1+...+n-1)=O(n^2)。其他情况下也要考虑移动元素的次数,故时间复杂度为O(n^2)直接插入空间效率很好,只需要1个缓存数据单元,也就是说空间复杂度为O(1).转载 2014-08-23 18:11:38 · 555 阅读 · 0 评论 -
Java排序算法(五):快速排序
Java排序算法(五):快速排序快速排序是一个速度非常快的交换排序算法,它的基本思路很简单,从待排的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的数据元素放到左边,所有比它大的数据元素放到它的右边。经过这样一趟下来,该序列形成左右两个子序列,左边序列中的数据元素的值都比分界值小,右边序列中数据元素的值都比分界值大。接下来对左右两个子序列进行递归排序,对两个子序列重新选择中心转载 2014-08-23 18:12:14 · 523 阅读 · 0 评论 -
Java排序算法(二):直接选择排序
Java排序算法(二):直接选择排序直接选择排序的基本操作就是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完,它需要经过n-1趟比较。算法不稳定,O(1)的额外的空间,比较的时间复杂度为O(n^2),交换的时间复杂度为O(n),并不是自适应的。在大多数情况下都不推荐使用。只有在希望减少交换次数的情况下可以用。基本思转载 2014-08-23 18:06:47 · 414 阅读 · 0 评论 -
Java排序算法(一):概述
Java排序算法(一):概述排序是程序开发中一种非常常见的操作,对一组任意的数据元素(或记录)经过排序操作后,就可以把他们变成一组按关键字排序的有序队列。对一个排序算法来说,一般从下面3个方面来衡量算法的优劣:时间复杂度:它主要是分析关键字的比较次数和记录的移动次数。空间复杂度:分析排序算法中需要多少辅助内存。稳定性:若两个记录A和B的关键字值相等,但是排序后A,B的先后次序保转载 2014-08-23 18:06:51 · 372 阅读 · 0 评论 -
Java排序算法(十):桶式排序
Java排序算法(十):桶式排序桶式排序不再是一种基于比较的排序方法,它是一种比较巧妙的排序方式,但这种排序方式需要待排序的序列满足以下两个特征:待排序列所有的值处于一个可枚举的范围之类;待排序列所在的这个可枚举的范围不应该太大,否则排序开销太大。排序的具体步骤如下:(1)对于这个可枚举范围构建一个buckets数组,用于记录“落入”每个桶中元素的个数;(2)将(1)中得到转载 2014-08-23 18:17:07 · 391 阅读 · 0 评论 -
Java排序算法(四):冒泡排序
Java排序算法(四):冒泡排序冒泡排序是计算机的一种排序方法,它的时间复杂度为O(n^2),虽然不及堆排序、快速排序的O(nlogn,底数为2),但是有两个优点:1.“编程复杂度”很低,很容易写出代码;2.具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,而堆排序、快速排序均不具有稳定性。不过,一路、二路归并排序、不平衡二叉树排序的速度转载 2014-08-23 18:09:00 · 422 阅读 · 0 评论 -
十种排序算法[集锦]
10种排序算法总结排序算法有很多,所以在特定情景中使用哪一种算法很重要。为了选择合适的算法,可以按照建议的顺序考虑以下标准: (1)执行时间 (2)存储空间 (3)编程工作 对于数据量较小的情形,(1)(2)差别不大,主要考虑(3);而对于数据量大的,(1)为首要。 主要排序法有: 一、冒泡(Bubble)排序——相邻交换 二、选择排序转载 2013-10-24 09:05:21 · 688 阅读 · 0 评论