数据结构与算法
muzigef
这个作者很懒,什么都没留下…
展开
-
归并排序和快速排序的衍生问题
归并排序和快速排序都是采用分治算法的设计思想 分治算法顾名思义,分而治之。就是将原问题,分割成同等结构的子问题之后将子问题逐一解决后,原问题也就得到了解决。 归并排序重在治,即如何有序的合并到一起,分仅仅是简单的二分 快速排序重在分,即如何根据标定点将元素划分 下述两个应用的步骤和代码待补充 归并排序可用于求逆序对,时间复杂度为O(nlog2n) 快速排序可用于求数组中第n大的元素...原创 2020-05-05 09:53:20 · 144 阅读 · 0 评论 -
三路快速排序
双路快速排序的时间复杂度为O(nlog2n),空间复杂度为O(n) 双路快速排序的核心思想:单路快排会将等于V的元素分配在左侧或者右侧,当数组中有大量重复元素时,这将会导致左右两侧的元素数量极度不均衡,时间复杂度退化到O(n^2),,如下图所示:为了避免该问题,双路快排是将等于V的部分近乎平均的分配在左右两侧;三路快排是将等于V的部分集中到中间,左右两侧分别为小于V和大于V的部分,这样不用对大量...原创 2020-05-05 09:53:03 · 2121 阅读 · 0 评论 -
双路快速排序
双路快速排序的时间复杂度为O(nlog2n),空间复杂度为O(n) 双路快速排序的核心思想:单路快排会将等于V的元素分配在左侧或者右侧,当数组中有大量重复元素时,这将会导致左右两侧的元素数量极度不均衡,时间复杂度退化到O(n^2),如下图所示:双路快排是将等于V的部分近乎平均的分配在左右两侧,避免了该问题 说明:双路快速排序可以有效提升有大量重复元素数组的快排效率 排序的步骤和示意图如下: ...原创 2020-05-05 09:52:48 · 376 阅读 · 0 评论 -
单路快速排序
单路快速排序的时间复杂度为O(nlog2n),空间复杂度为O(n) 单路快速排序的核心思想:选取一个参考元素,将数组二分(一般为非等分),保证左侧部分比参考元素小,右侧部分比参考元素大,即将参考元素放到该元素在数组中应该在的位置,如下图所示: 排序的过程和示意图如下: 随机选择一个位置的元素与数组首元素交换位置,作为参考元素V,此操作可以有效避免快速排序在排序近乎有序的数组时,退化为时间复杂...原创 2020-05-05 09:52:30 · 420 阅读 · 0 评论 -
插入排序
插入排序的时间复杂度为O(n^2),空间复杂度为O(n) 插入排序的核心思想:依次将元素插入合适的位置,保证每次插入之后的数据都是有序的,可类比于不断抓牌,并将牌按照大小顺序插入合适的位置 说明:插入排序针对几乎有序的数据的排序性能极好 排序的过程如下: 第一个元素8默认是有序的,不会进行排序,因此从第二个元素开始排序 取出第二个元素6,比较6与8,6比8小,因此6与8交换位置,至此6位...原创 2020-05-05 09:52:10 · 123 阅读 · 0 评论 -
选择排序
选择排序时间复杂度是O(n^2),空间复杂度O(n) 选择排序的核心思想:依次从剩余元素中找出最大或者最小的元素 示意图如下,排序的过程如下: 从所有元素中选择最小的1,并与原来位于第一个位置的元素交换 从所有元素中选择最小的2,并与原来位于第二个位置的元素6交换 依次类推,直到所有的元素排序完成 代码如下: template<typename T> void sele...原创 2020-05-05 09:51:46 · 163 阅读 · 0 评论