随笔分类 - 数据结构与算法
摘要:分治算法思想 前两节的归并排序和快速排序都使用了分治算法的排序思想,分治算法:顾名思义,分而治之,就是将原问题分割成同等结构的子问题,之后将子问题逐一解决后,原问题也就得到了解决。 以下使用分支算法的思想解决一些问题。 逆数对 计算数组中逆数对的个数,一个数组中逆数对的个数能表示数组的有序程度。如下
阅读全文
摘要:三路快速排序算法分析 双路快速排序算法把等于v的数据分为两部分,方式了数据量一边倒的情况,三路排序算法把排序的数据分为三部分,分别为小于v,等于v,大于v,这样三部分的数据中,等于v的数据在下次递归中不再需要排序,小于v和大于v的数据也不会出现某一个特别多的情况(如下图所示),通过此方式三路快速排序
阅读全文
摘要:双路快速排序算法分析 对于具有大量重复数据的排序按照之前的方式性能会很低,现在我们增加两个标志,想办法把大量重复的数据分到两部分,例如设置v作为标志数据,让等于v的数据分为两部分,如下图所示,这样可以避免两边的数据出现一边倒的情况。 根据以上算法的思想,代码修改如下: 经过性能测试,双路排序算法对具
阅读全文
摘要:算法分析 快速排序算法的时间复杂度为nlog(n)。 基本思想:选择一个元素作为标志,比如下标为k的元素,经过排序使,arr[0,1,2....k-1]的元素小于arr[k],arr[k+1,k+2...n]的元素大于arr[k],然后对arr[0,1,2...k-1]和arr[k+1,k+2...
阅读全文
摘要:算法分析 归并排序算法的时间复杂度能达到nlog(n)。 归并排序算法的基本思想:归并排序算法是把数据逐次分割成每块,对每块进行排序后,然后再进行合并成为一个排好序的数据。 第一步:数据平均分割 第二步:再次对数据进行平均分割,直到数据无法再分割,也就是每份数据只有一个了,然后再对每份数据进行合并,
阅读全文
摘要:简介 以下总结几个基础的排序算法,包括选择排序、插入排序、冒泡排序、希尔排序,这几个排序算法是比较简单的几个。以下给出算法的分析和代码示例。 时间复杂度 选择排序、插入排序、冒泡排序、希尔排序四个排序算法的时间复杂度都是O(n^2)。 算法分析 选择排序 选择排序取第一个元素以此与后续的元素进行比较
阅读全文