![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 61
kingdragonfly
这个作者很懒,什么都没留下…
展开
-
分治法与动态规划求解斐波那契数列
分治法和动态规划相同点在于二者都需要将原问题划分为一些个子问题,且子问题与原问题一样只是规模更小,然后递归地求解出子问题合并后得到原问题的解。其不同点在于分治法将分解出的子问题看成独立的存在,分别求解(公共子问题存在重复求解),而动态规划将子问题解保存到表格中,遇到公共子问题只需求解一次,以后可以中表格中查找子问题的解。分治法求解问题分为3步:分解:将问题划分为一些子问题,子问题的原创 2013-09-07 11:03:02 · 6727 阅读 · 0 评论 -
排序算法总结(六)归并排序
归并排序是将数组中数两两合成有序表,然后再将有序表两两合成新的有序表,直到所有有序表合成一个有序表,完成排序。归并排序是稳定的排序算法,需要辅助空间O(n),最好和最坏的情况下时间复杂度都是O(nlogn)。参考代码:#include using namespace std;void Sort(int *arrays, int start, int mid, int e原创 2013-09-13 19:07:54 · 645 阅读 · 0 评论 -
排序算法总结(四)希尔排序
希尔排序又称缩小增量排序,是插入排序的一种。它的基本思想是先将整个待排记录序列分割成若干个子序列,然后对这若干个子序列分别进行直接插入排序,等到待排序列基本有序时,再对整个序列进行直接插入排序。比如如下数组,先已step=5进行分割。49,38,65,97,76,13,27,49,55,4由于step=5,则 将49与13排序,38与27排序,65与49排序,97与55排序,76与4排原创 2013-09-13 17:03:41 · 642 阅读 · 0 评论 -
排序算法总结(二)基数排序
前文介绍过计数排序,虽然其时间复杂度为O(n),但是其辅助空间需求较大,对于一个待排序正数数组A其所需辅助空间为max(A),当A中数值较大时辅助空间难以接受。下面介绍一种在计数排序基础之上改进的排序算法基数排序,其时间复杂度为O(1),并且只消耗10个辅助空间。基数排序原理: 假定A={319,456,657,656,436,920,359}我们可以按照如下规则排序:先按原创 2013-09-08 22:31:00 · 646 阅读 · 0 评论 -
排序算法总结(三)插入排序
插入排序的原理是从数组的某个位置开始依次和前面的位置数相比,找到插入位置,将数插入到该位置,这样多次插入后,得到的将是一个有序数组。参考代码:#include using namespace std;void InsertSort(int *arrays,int len);int main(void){ int i; int arrays[]={9,8,7,6,原创 2013-09-13 16:10:13 · 555 阅读 · 0 评论 -
排序算法总结(一)计数排序
比较排序算法时间复杂度下界为O(nlogn),这里介绍一种非比较排序算法:计数排序,其时间复杂度为O(n)。 计数排序原理 假定有三个数组,A,B,C,A为待排序数组,B为输出数组,C为临时数组。 计数排序的思想是对于A中每一个元素x确定小于等于x元素个数n,将其保存到临时数组C中,这样通过查找临时数组C可以直接确定待排序数组各元素位置,从而避免比较。 假定数组A保原创 2013-09-06 22:51:03 · 849 阅读 · 0 评论 -
排序算法总结(五)快速排序
快速排序的思想是选取待排数组中的一个数作为中间数(一般是第一个数),然后将数组中数与这个中间数进行比较,使中间数左边的数都小于中间数,中间数右边的数都大于中间数,这样中间数就在正确的位置上,然后将左右两部分再次进行相同的操作,最终会得到一个有序的数组。快速排序的算法平均时间复杂度为O(nlogn),最坏的情况每次划分将数组分成1和n-1两部分,算法时间复杂度为O(n2),需要辅助空间为O(lo原创 2013-09-13 18:59:43 · 553 阅读 · 0 评论 -
大数相乘算法
原文地址:http://hi.baidu.com/huifeng00/item/8a7ac81472d986028ebde496C语言实现大数相乘#include #include #define SIZE 50int a[SIZE],b[SIZE],c[SIZE*2];void big_multi(int a[],int b[],int c[]){int i,j;f转载 2013-09-12 11:45:15 · 578 阅读 · 0 评论 -
华为2014校园招聘机试题(一)
任意一个数N可以分解成连续整数之和N=N1+N2+...的形式,可能存在多种分割方法,编程实现数字分割。如3=1+215=1+2+3+4+515=4+5+615=7+8参考代码:#include using namespace std; void divide(int num) { int i,j; int sum=0;原创 2013-09-12 20:24:48 · 728 阅读 · 0 评论 -
排序算法总结(八)选择排序
选择排序思想是每次从数组中选出最大后最小的数,放到正确的位置,然后在剩余的数中再次选择最大或者最小的数放到正确位置,一直重复知道完成排序。参考代码:#include using namespace std;SelectSort(int *arrays,int n);void main(){ int arrays[]={9,8,7,6,5,4,3,2,1}; i原创 2013-09-18 14:17:32 · 606 阅读 · 0 评论