随笔分类 - 算法与数据结构
摘要:前面我们写了常见的几种排序算法,并分析了各种算法的实现思想,及时间复杂度等情况,但由于只是分析,木有实际的数据做对比测试,所以对各个算法的效率也没有一个明确的概念,下面我们就通过具体的测试来看看同算法之间的效率差距。声明11个长度为100的元素取值范围为0到1000的序列int length = 1...
阅读全文
摘要:桶排序是一种效率很高的排序算法,它的时间复杂度为O(n),但桶排序有一定的限制,只有当待排序序列的元素为0到某一确定取值范围的整数时才适用,典型的例子比如成绩的排序等。算法思想:设待排序序列的元素取值范围为0到m,则我们新建一个大小为m+1的临时数组并把初始值都设为0,遍历待排序序列,把待排序序列中...
阅读全文
摘要:希尔排序是由D.L.Shell于1959年提出的,所以称为希尔排序。希尔排序又称缩小增量排序,是插入排序的一种改进。基本思想:希尔排序是基于插入排序的以下特点:待排序的序列元素数量越少排序速度越快;待排序序列的元素基本有序时排序速度越快;基于以上思想将待排序序列分为多个子序列分别进行插入排序,然后减...
阅读全文
摘要:归并排序也是基于分治思想的一种排序算法,是通过对两个或两个以上的有序序列合并来实现的,对两个序列合并的叫两路归并,对两个以上序列合并的叫多路归并。归并排序的时间复杂度也为O(N*logN)。下面来看一下两路归并的实现:基本思想:归并排序时先找出序列的中间元素把序列分解为两个子序列,对子序列重复这个过...
阅读全文
摘要:快速排序是基于分治思想的一种排序算法,就像该方法的名字一样,速度比较快,所以叫做快速排序;它的平均时间复杂度为O(N*logN),最坏时间复杂度为O(n²)。快速排序也有很多优化的版本,比如在排序时基数的选择等等…下面就说一下一般的快速排序的实现。基本思想:快速排序的基本思想就是,先从待排序的序列中...
阅读全文
摘要:递推法就是根据已知条件,分析推导出问题中的联系,然后一步一步进行推倒直至得到结果。根据具体问题我们需要选择是正推还是逆推来解决问题。下面先举一个递推中的经典例子,就是求兔子数量的问题:现有一只一个月大的兔子,已知当兔子在第三个月大时每月就可以生下一只小兔子(好吧,就按兔子是无性繁殖的),求一年后兔子...
阅读全文
摘要:本次介绍排序算法中的插入排序。1.直接插入排序:基本思想:直接插入排序也需要对待排序的序列在外层进行n-1次遍历,每次遍历时只把本次遍历次数处的元素和该元素之前的元素进行比较,来决定插入位置,并把从插入位置开始到该元素之前的所有元素后移,使从序列开始到该元素为止序列中的元素有序,直至遍历完成序列整体...
阅读全文
摘要:上一篇我们记录了冒泡排序算法的实现,这次我们来看直接选择排序是如何实现的。1.直接选择排序:基本思想:直接选择排序也是对被排序的序列进行n-1次遍历,与冒泡排序不同的是,它并不对本次遍历序列内的元素两两进行比较并根据比较的结果来决定是否交换,而是找出本次遍历的序列内元素的最小值,并插入本次遍历的开始...
阅读全文
摘要:之前看到一个题目,大概是:有一个长度为n的数组,数组内的元素取值范围为0到m,且不相等,要求元素经过n次移动后使数组有序(即算法的复杂度为O(n))。看到题目后想了快速排序和归并排序发现并不能满足题目要求,直到有次看书又看到了桶排序然后豁然开朗,所以决定把这些排序算法再写一遍,加深记忆。约定:之后的...
阅读全文
浙公网安备 33010602011771号