数据结构和算法
文章平均质量分 95
数据结构和算法
timeshark
猫头鹰是我的好朋友~
展开
-
堆和堆排序
堆和堆排序堆和堆排序堆1 维护堆的性质2 建堆堆排序算法优先队列1. 堆(二叉)堆是一个数组,它可以看成是近似的完全二叉树,树上的每一个结点对应数组中的一个元素。结点A[i]的左右孩子结点对应为A[2i] & A[2i+1]。则A[i]的父结点为A[i/2](此处以及后文统一默认向下取整)。乘2与除2做操作在计算机中可以用移位操作实现,因此会比较快。由此可知这棵树除最后一层外,完全原创 2016-05-18 18:27:57 · 420 阅读 · 0 评论 -
快排代码示例
快排是排序中的经典算法,最坏情况下复杂度是O(n^2),期望的时间复杂度是O(nlgn)。主要思想是:每次给一个元素x=A[r]找到其特定的位置,使左边的元素都小于x,右侧的值都大于x。如何实现就是用i来标记小于x的个数,然后没遇到一个小于x的值,就把i的范围值加1,并把这个较小的值置换进小于x的区域里。最后r前的元素都遍历完了,就把元素x与i+1位置上的元素置换,因为i+1这个位置,对应的就应该是原创 2016-05-19 14:51:32 · 5202 阅读 · 1 评论 -
归并排序
归并排序,复杂度O(nlgn)。 思路是每次将数组分成两部分,然后对各部分进行排序,通过合并(归并)操作将两段已经排序过的数组进行整合,形成新的排序数组的顺序。void merge(vector<int>& nums, int left, int mid, int right){ vector<int> L(nums.begin() + left, nums.begin() + mid+1原创 2016-06-12 09:53:56 · 219 阅读 · 0 评论 -
计数排序
在已知待排序的元素范围为0-k之间时,可使用计数排序。当k=O(n)时,此时运行时间为Θ(n)。思路是:记录对应元素出现的次数,则可以推算出改元素在排序后中的数组的下标。void counting_sort(vector<int>& A, vector<int>& B, int k){ vector<int> C(k + 1, 0); for (int i = 0; i < A.si原创 2016-06-12 12:29:56 · 321 阅读 · 0 评论 -
排序和顺序统计量
很多计算机科学家认为排序是算法研究中最基础的问题,不仅如此,有的学者指出对待解决问题先进行排序,可能有利于的问题的分析以及求解思路的产生。排序算法1 插入排序2 归并排序3 堆排序31 堆311 维护堆的性质312 建堆32 堆排序算法33 优先队列4 快速排序5 计数排序6 基数排序和桶排序7 总结和要求顺序统计量1 最小值和最大值2 期望为线性时间的选择算法3 最原创 2016-06-12 23:08:58 · 2970 阅读 · 0 评论