
数据结构之算法
月亮是蓝色
纸上得来终觉浅,绝知此事要躬行
展开
-
算法之快速排序(C++实现)
快速排序:基本思想:通过一趟排序将数分割为左,右两部分,并选择出基数,使得左边的都得基数小,右边的都比基数大,并依此递归操作。图解如下:假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接转载 2017-12-19 17:46:52 · 31368 阅读 · 6 评论 -
算法之归并排序(C++实现)
归并排序:算法思想:分而治之(分三步骤)第一, 分解: 把待排序的 n 个元素的序列分解成两个子序列, 每个子序列包括 n/2 个元素. 第二, 解决: 对每个子序列分别调用归并排序MergeSort, 进行递归操作 第三, 合并: 合并两个排好序的子序列,生成排序结果.时间复杂度分析:第一步:分解,时间复杂度为θ(1)第二步:解决,对每个子序列进行递归操作。时间复杂度原创 2017-12-19 16:15:01 · 4869 阅读 · 0 评论 -
算法之堆排序(最大堆c++实现)
堆是完全二叉树的结构,因此对于一个有n个节点的堆,高度为O(logn)。最大堆:堆中的最大元素存放在根节点的位置。 除了根节点,其他每个节点的值最多与其父节点的值一样大。也就是任意一个子树中包含的所有节点的值都不大于树根节点的值。堆中节点的位置编号都是确定的,根节点编号为1,每一层从左到右依次编号。由堆是完全二叉树,可以知道当堆中某个节点的编号为i时,如果这个节点有左右子树,那么左子树的节原创 2017-12-20 15:08:53 · 23315 阅读 · 0 评论 -
【算法】寻找数组第K大数算法总结
今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的值。 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,当然,解决这个问题的方法很多,本人在网上搜索了一番,查找到以下的方式,决定很好,推荐给大家。 所谓“第(前)k大数问题”指的是在长度为n(n>=k)的乱序数组中S找出从大到小顺序的第(前)k个数的问题。 解法转载 2017-12-21 11:58:39 · 1293 阅读 · 0 评论 -
算法之插入排序(C++实现)
插入排序的基本思想是每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。常见的插入排序有插入排序(Insertion Sort),希尔排序(Shell Sort),二叉查找树排序(Tree Sort),图书馆排序(Library Sort),Patience排序(Patience Sort)。下面介绍前两种:(一)直接插入排序最差时间复原创 2017-12-16 20:18:01 · 278 阅读 · 0 评论 -
算法之冒泡排序(C++实现)
冒泡排序冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。冒泡排序原理1:比较相邻的元素。如果第一个比第二个大,原创 2017-12-17 11:34:07 · 953 阅读 · 0 评论