算法
文章平均质量分 81
算法分析和代码
辰470
无
展开
-
堆 排 序
008 堆排序一、算法介绍堆的概念堆可看成是一颗完全二叉树满足的顺序存储结构。满足任何分支结点的关键字都大于其左右孩子结点关键字的,称为大根堆;满足任何分支结点的关键字都小于其左右孩子结点关键字的,称为小根堆。完全二叉树完全二叉树的定义若二叉树中最多只有最下面两层的结点度数可以小于2,并且最下面一层的叶子结点都依次排列在最左边的位置上,这样的二叉树成为完全二叉树。完全二叉树的性质我们把二叉树的各个结点按照层数的大小,同一层从左到右的次序进行编号。对于层序遍历编号为i的结点,有如下性质:1.原创 2020-12-19 00:53:30 · 560 阅读 · 0 评论 -
快速排序
007 快速排序一、算法介绍快速排序是由冒泡排序改进而得的。作为目前内排序算法中最快的排序算法,快速排序通常明显比时间效率同为 O(nlogn) 的其他算法更快。其基本思想是:在待排序的n个元素中任取一个(通常取第一个)作为基准(pivot),把该元素放到适当的位置,数据序列被此元素划分为两部分。比该元素小的放在前一部分,大的放在后一部分,这样基准元素就被放在了适当的位置,即归位。然后分别再对划分出的两部分进行同样的操作,直到划分的部分只有一个元素或为空。这一过程中大树一直在往后移,小数一直往前移,所以原创 2020-12-16 16:25:24 · 155 阅读 · 0 评论 -
希尔排序
006 希尔排序一、算法介绍希尔排序是直接插入排序的改进版本,也称递减增量排序算法。其基本思想是:按照一定间隔将待排序序列分为若干组,再对每组进行插入排序。一轮排序结束后,缩小间隔再进行相同的操作。序列在一轮轮的分组排序后逐渐变得有序,最后再对整个序列进行直接插入排序。二、算法分析初始间隔一般取序列长度的一半,一轮排序结束后将 序列减半。最后间隔为一时即对整个序列直接插入排序。序列大致有序时,直接插入排序就比乱序序列提高不少时间效率,因为直接插入排序在比较时遇到更小元素时就直接结束这一轮遍历插入,否原创 2020-12-15 18:05:33 · 171 阅读 · 1 评论 -
二分归并排序
005 二分归并排序一、算法介绍将待排序序列分成两个子序列,然后对两个子序列使用相同算法进行排序,最后将排好序的两个子序列归并成为一个序列。核心思想是将复杂的问题拆分成为若干个简单的子问题,分别对子问题求解,再对子问题进行综合进而得到大问题的解,这就是所谓的分而治之。二、算法分析算法分为两部分,首先是“二分”算法,显然可以利用递归对序列进行拆分,例如数组A[1-8],将其拆分为A[1-4]和A[5-8],然后再对两个数组进行拆分,例如将A[1-4]拆分为A[1-2]和A[3-4],当拆分成A[1]和原创 2020-12-14 16:26:40 · 442 阅读 · 0 评论 -
选择排序
004 选择排序一、算法介绍选择排序是从未排好序的序列中选出一个最小的元素,然后将其放在已排好序序列的末尾。直到待排序的元素个数为零。第一次序列中排好序的序列是一个空序列,因此将整个序列中最小的元素放在首部。二、算法分析每次循环是从待排序序列选择最小元素然后将其放在待排序序列的首位置,因此可以记录当前最小元素的位置(循环开始时以第一个元素为最小),然后向后遍历,与当前最小元素比较,若比当前最小元素小就记录该元素的位置。循环结束时就把记录位置的元素与待排序序列的第一个元素交换位置。因为每次选择最小元素原创 2020-12-13 23:49:29 · 68 阅读 · 0 评论 -
冒泡排序
003冒泡排序一、算法介绍冒泡排序是重复地遍历要排序的序列,判断相邻的两个元素的顺序是否正确,若不正确,则交换位置。重复地遍历直到没有元素需要交换,此时序列已排好序。二、算法分析第一轮遍历时,从第一个元素开始,若后面的元素比当前遍历的元素小,则交换它们的位置,直到倒数第二个数。第一轮遍历结束后,因为一定是较大元素向后移,所以最大的元素就被放到了最后一个位置。则此后的遍历地结束位置都要比上一轮前移一个位置。如图所示三、算法代码运行结果...原创 2020-12-10 18:16:18 · 127 阅读 · 0 评论 -
插入排序
002插入排序一、算法介绍插入排序是将一个数插入到已排好序的有序表里。如同打扑克时,将摸到的牌和手上的牌比较大小,然后插入到合适的位置。其基本思想是,假设前n-1个数已排好序,插入第n个数时,从第n-1个数开始,从后向前依次与第n个数进行比较,直到找到其应该插入的位置将其插入。照此方法对后面的所有数进行插入,从而使整个序列变得有序。二、算法分析在得到一个数组后,把第一个数看作有序序列,即从第二个数开始进行插入。进行操作时,先把要插入的数拿出来,在原来的位置留一个空,再依次向前遍历,如果遇到前面的数原创 2020-12-09 17:01:02 · 107 阅读 · 0 评论 -
汉诺塔问题
汉诺塔问题001汉诺塔问题一、问题描述有A、B、C三根柱子,在A杆自下而上、由大到小按顺序放置64个圆盘。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:把一个圆盘从一根柱子移到另一根柱子称作1次移动,在移动和放置时允许使用B柱,但在移动过程中三根杆上都始终保持大盘在下,小盘在上。问把所有圆盘从A盘移到C盘上总共需要进行多少次移动?二、算法分析让我们把问题简化一下:当A柱上只有一个圆盘时,只需移动一次,即A—>C.当A柱上有两个圆盘时,需移动三次,即A—>原创 2020-12-08 20:34:12 · 8385 阅读 · 0 评论