算法学习
21世纪的小小达
本人始于1996
展开
-
归并排序(MERGE_SORT)
归并排序(MERGE_SORT) 1)分治思想 :归并排序用到了一种称为分治法的设计方法,分治法的思想就是将原问题的分解成为几个规模小的但是类似于原问题的子问题,递归的求解子问题,之后再合并子问题的解,来组成原问题的解。 2)原理 :根据分治方法的思想,归并排序算法的基本操作分为三大步:分解,解决问题,合并结果。以一个需要排序的数组为例,分解也就是不停地递归分解问题,直到问题的规模降为1原创 2015-06-18 11:09:31 · 1251 阅读 · 0 评论 -
基数排序
基数排序①简介 基数排序是一种用在卡片排序机上的算法,一张卡片有80列,在每一列上机器可以选择在12个位置中的任意一处穿孔。通过机器的操作,能够“编程”来检查每个卡片中的给定列,然后根据穿孔的位置将他们分别放在12个容器中。操作员就可以挨个容器来收集卡片,其中第一个位置穿孔的卡片在最上面,以此类推。②原理 直观上来看,可能会认为应该先按照最高有效位进行排序并分装到不同的容器中,再对每个容原创 2015-06-29 13:29:15 · 1585 阅读 · 0 评论 -
计数排序
计数排序原理 计数排序的基本思想是:对于每一个输入元素x,确定小于x的元素个数。根据这些信息,就能准确的将每个数字放在正确的位置上。 在排序的过程中,除了输入数组A[n]之外,还需要一个记录结果的数组B[n]和一个记录小于x数的个数数组C[num_max]。A与B的数组等长,而C数组的长度则为n个数中的最大者。 上图为计数排序的一系列过程,下面依次做分析: (a)中显示了原始数组A原创 2015-06-27 09:45:50 · 1318 阅读 · 0 评论 -
快速排序
快速排序原理 和之前学习到的归并排序一样,快速排序也使用了分治的思想。假设现有一个数组a[start,end],对这个数组进行快速排序分了下面三个步骤: 分解:在数组a[start,end]中确定一个标准(一般是找a[end]),以这个标准调整元素并找出一个位置p,使得start<=i<=p-1区域内的所有元素都小于等于a[end],而p+1<=i<=end这个区域中所有元素都大于等于a[en原创 2015-06-24 16:33:11 · 1194 阅读 · 0 评论 -
最大优先队列
最大优先队列前言 堆排序是一种集插入排序和选择排序的有点于一身的排序算法,但是在后面能学习到更加好的快速排序算法,性能优于堆排序。堆这钟数据结构还有许多其他的用处,例如作为高效的优先队列。优先队列分为最大优先队列和最小优先队列,今天学习了如何用最大堆来实现最大优先队列。 优先队列是一种用来维护由一组元素构成的集合S的数据结构,其中的每一个元素都有一个相关的值,称为关键字。一个最大优先队列原创 2015-06-24 10:24:12 · 1874 阅读 · 0 评论 -
堆排序
堆排序前言 堆排序和归并排序一样,时间复杂度都是O(nlg(n)),和插入排序相同的是具有空间的原址性:任何时候都只需要常数个额外的空间元素存储临时数据。因此堆排序可以说是结合了之前讨论的两种排序算法的优点。 (二叉)堆又是一个数组,它可以被堪称一个近似的完全二叉树,树上的每一个节点都对应着数组中的一个元素。从图中可以看到,除了叶节点之外,该树是完全充满的,而且是从左向右的填充。很容易就原创 2015-06-22 15:11:02 · 1465 阅读 · 0 评论 -
最大子数组的和
最大子数组的和 在给定的一个数组中,找出连续的一部分数组,使其中的元素和最大。例如输入1,-2,5,3,-3,7,-2,-1,输出的最大子数组和为12。 ①如果什么都不考虑,用最直接的办法来求解,即三重for循环来暴力求结果,该算法的时间复杂度为O(n^3)代码如下://本段代码引自编程之美 int MaxSum(int* A, int n) { int maximum = -INF;原创 2015-06-21 14:37:18 · 1291 阅读 · 2 评论 -
插入排序(INSERTION_SORT)
插入排序(INSERTION_SORT) 1)原理 : 插入排序对于少量的元素排序是一个有效的算法。插入排序的工作方式像是在拿扑克牌一样,最开始的时候手里是空的,每抽到一张牌就将其在另一只手上按一定的规律排好序,直到所有的元素排列完成。 2)C语言实现 :#include<stdio.h> #include<cstdlib> void sortNum(int count, int *a)原创 2015-06-18 11:08:26 · 1611 阅读 · 0 评论 -
选择排序
选择排序 1)原理:对于一个将要排序的数组A[n],先找出最小元素(升序排列),将其与A[0]交换,接着在数组下标为1~n-1的元素中寻找最小值,与A[1]交换,直到排序结束。 2)C语言实现:void main() { int t,temp,count, *p; printf("please input the count :"); scanf_s("%d",原创 2015-06-18 11:10:48 · 1315 阅读 · 0 评论 -
桶排序
桶排序①简介 桶排序假设输入数据服从均匀分布,平均情况下它的时间代价为O(n)。桶排序假设输入是由一个随机过程产生,该过程将元素均匀,独立的分布在[0,1)区间上。②原理 桶排序将[0,1)区间划分为n个相同大小的子区间,或称为桶。然后将n个输入的数据分别放到各个桶中。因为输入数据是均匀分布的,一般不会出现很多数落在一个桶中的情况。为了得到输出结果,先对每个桶中的数据进行排序,再遍历每个原创 2015-07-01 08:49:23 · 1512 阅读 · 0 评论