算法
文章平均质量分 64
fight_to_dead
这个作者很懒,什么都没留下…
展开
-
排序算法总结之快速排序 Quick Sort
算法原理:快速排序采用分治的思想 (divide and conquer):1. 首先将原数组根据pivot的值划分成两个字数组,一个数组的的值都小于pivot, 一个数组的值都大于pivot;2. 对两个子数组分别进行排序3. 把已经有序的子数组合并得到有序的数组。算法伪代码:伪代码出自算法导论快速排序算法部分QUICKSORT (A, p, r)if (原创 2015-04-29 16:49:17 · 528 阅读 · 0 评论 -
排序算法总结之希尔排序 Shell Sort
算法原理:希尔排序实际上是一种插入排序算法。取一个小于n的整数d1作为第一个增量,把数组分成d1个组。所有距离为d1的倍数的元素放在同一个组中。在各组内进行插入排序。然后取第二个增量d2以上图的过程为例说明希尔排序的过程:d1=5 分组结果为 (a1, a6, a11), (a2, a7, a12), (a3, a8), (a4, a9),原创 2015-05-04 13:29:54 · 650 阅读 · 0 评论 -
排序算法总结之桶排序 Bucket Sort
算法原理:桶排序假设输入数据服从均匀分布,假设输入数据由一个随机过程产生,该过程将元素均匀,独立地分布在[0,1)区间上。将[0,1)区间划分为n个相同大小的子区间,称为“桶”,然后便利输入的数据,分别放入在制定的同种,然后依次把各个桶中的数据输出。算法伪代码:BUCKET-SORT(A)let B[0..n-1]原创 2015-05-04 15:27:48 · 752 阅读 · 0 评论 -
排序算法总结之基数排序 Radix sort
算法原理:基数排序是基于非比较的的整数排序算法。它采用分治的思想进行排序,与快速排序和归并排序在数组级别的分治思想不同,基数排序基于元素级别的分治。即从元素的最低位个位开始排序,然后依次排十位,百位等。下图展示了基数排序的排序过程。原创 2015-05-02 16:30:41 · 862 阅读 · 0 评论 -
排序算法总结之冒泡排序 Bubble Sort
算法原理:从数组的最后一个元素开始,依次和前一个元素进行比较,如果比前一个元素小,则交换位置,再继续和前一个元素进行比较。一轮后最小的元素在数组的首位,下一轮选出第二大的元素,直到数组中所有元素都有序。算法为代码:BUBBLESORT(A)1. for i=1 to length[A]2. do for j=length[A] downto i+13. do i原创 2015-05-03 21:20:24 · 436 阅读 · 0 评论 -
动态规划题目思路
做动态规划题目主要考虑的几个方面:1. 每一个状态的含义,其中蕴含了怎样的小规模问题的结果2. 状态之间的关系,即如何通过小规模的状态计算大规模的状态3. 初始化状态,首先找到最小的问题的状态3. 结果,哪一个状态是最终需要的结果什么情况下想到用动态规划:1. 问题需要求最大/最小2. 求是还是不是3. 找到所有可能的方案4. 不能用排序原创 2015-05-11 20:24:16 · 294 阅读 · 0 评论 -
排序算法总结之归并排序 Merge Sort
算法原理:归并排序使用分治的思想(divide and conquer):1. 首先把数组平均分成两个子数组2. 对两个字数组递归的使用归并排序进行排序3. 把两个已经排好序的字数组合并得到结果归并算法的原理图如下:从图中可以看到归并排序把子问题的规模降低到1的时候停止,一个元素的数组一定是有序的。算法伪代码:伪代码来自算法导论归并排序算法部原创 2015-04-29 18:27:56 · 835 阅读 · 0 评论 -
排序算法总结之选择排序 Selection Sort
算法原理:选择排序的思想是首先找到数组中最小的元素放在首位,然后依次找到第二小,第三小元素直到整个数组有序。选择排序是冒泡排序的一种改进,冒泡排序在找当前最小元素的过程中只要遇到小的就交换,而选择排序直接找到最小的元素并放在相应的位置,省去了中间的多次交换。算法伪代码:SELECTION-SORT(A)n = length[A]for j=1 t n-1do sma原创 2015-05-03 21:44:16 · 454 阅读 · 0 评论 -
排序算法总结之计数排序 Counting Sort
算法原理:排序算法根据排序的原理可以分为两类:基于比较的和非比较的。常见的基于比较的排序算法有快速排序,堆排序,归并排序等,基于比较的排序算法平均情况最好是O(nlogn)。基于非比较的排序算法有三种:计数排序,计数排序和桶排序,它们的复杂度为O(n)。计算排序算法的思想是:对于数组中的 某一个元素x,统计小于x的元素的个数,基于这一信息,在输出的数组上把x放在相应的位置上。下图是算法原创 2015-05-02 15:31:36 · 1052 阅读 · 0 评论 -
排序算法总结之堆排序 Heap Sort
算法原理:堆排序算法利用二叉堆进行排序。最大堆得到升序的数组,最小堆得到降序的数组。1. 构建最大堆(最小堆)2. 从堆中取出根节点3. 维护最大堆(最小堆)堆:堆的是二叉树的一种,实际上是数组对象。树上的节点和数组中的元素相对应,每一层从左到右填满,只有最后一层可能不满。数组下标从1开始时,父节点下标和左右节点下标的原创 2015-04-29 21:23:10 · 660 阅读 · 0 评论 -
排序算法总结之插入排序 Insertion Sort
算法原理:插入排序的原理和打扑克时抓牌的原理相同。我们会把抓到的牌进行排序,从抓到第二张牌开始,和已经抓到的牌比较大小,并把新抓的牌插入到相应的位置。下图出自算法导论的插入排序部分,演示了插入排序的整个过程:算法伪代码:INSERTION-SORT(A)for j=2 to A.lengthke原创 2015-05-04 11:26:34 · 698 阅读 · 0 评论