![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 51
kingdragonfly
这个作者很懒,什么都没留下…
展开
-
分治法与动态规划求解斐波那契数列
分治法和动态规划相同点在于二者都需要将原问题划分为一些个子问题,且子问题与原问题一样只是规模更小,然后递归地求解出子问题合并后得到原问题的解。其不同点在于分治法将分解出的子问题看成独立的存在,分别求解(公共子问题存在重复求解),而动态规划将子问题解保存到表格中,遇到公共子问题只需求解一次,以后可以中表格中查找子问题的解。分治法求解问题分为3步:分解:将问题划分为一些子问题,子问题的原创 2013-09-07 11:03:02 · 6715 阅读 · 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 · 602 阅读 · 0 评论 -
排序算法总结(七)冒泡排序
冒泡排序的思想是从开始位置不断比较相邻两位置数字大小,这样第一轮将最大的数字替换到最后面的位置,第二轮将次大数字换到倒数第二位置,逐步完成排序。参考代码:#include using namespace std;void BubbleSort(int *arrays,int n);void main(){ int i; int arrays[]={1,4,5,原创 2013-09-18 14:10:46 · 595 阅读 · 0 评论 -
排序算法总结(二)基数排序
前文介绍过计数排序,虽然其时间复杂度为O(n),但是其辅助空间需求较大,对于一个待排序正数数组A其所需辅助空间为max(A),当A中数值较大时辅助空间难以接受。下面介绍一种在计数排序基础之上改进的排序算法基数排序,其时间复杂度为O(1),并且只消耗10个辅助空间。基数排序原理: 假定A={319,456,657,656,436,920,359}我们可以按照如下规则排序:先按原创 2013-09-08 22:31:00 · 638 阅读 · 0 评论 -
排序算法总结(五)快速排序
快速排序的思想是选取待排数组中的一个数作为中间数(一般是第一个数),然后将数组中数与这个中间数进行比较,使中间数左边的数都小于中间数,中间数右边的数都大于中间数,这样中间数就在正确的位置上,然后将左右两部分再次进行相同的操作,最终会得到一个有序的数组。快速排序的算法平均时间复杂度为O(nlogn),最坏的情况每次划分将数组分成1和n-1两部分,算法时间复杂度为O(n2),需要辅助空间为O(lo原创 2013-09-13 18:59:43 · 548 阅读 · 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 · 551 阅读 · 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 · 636 阅读 · 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 · 638 阅读 · 0 评论 -
排序算法总结(一)计数排序
比较排序算法时间复杂度下界为O(nlogn),这里介绍一种非比较排序算法:计数排序,其时间复杂度为O(n)。 计数排序原理 假定有三个数组,A,B,C,A为待排序数组,B为输出数组,C为临时数组。 计数排序的思想是对于A中每一个元素x确定小于等于x元素个数n,将其保存到临时数组C中,这样通过查找临时数组C可以直接确定待排序数组各元素位置,从而避免比较。 假定数组A保原创 2013-09-06 22:51:03 · 844 阅读 · 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 · 575 阅读 · 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 · 722 阅读 · 0 评论 -
不用中间变量交换两个整形变量值
目前我能想到四种方法,大家看看能不能补充一下。#include using namespace std;void main(){ int a=3; int b=4; a=a+b-(b=a); cout <<"a="<<a<<" b="<<b<<endl; a=a+b; b=a-b; a=a-b; cout <<"a="<<a<<" b="<<b<<endl原创 2013-09-09 20:35:59 · 518 阅读 · 0 评论 -
C++多态与虚函数
面向对象程序设计精髓在于继承与多态,为了实现这两功能C++提供了一系列方法,本文介绍多态实现方法。简单定义一个基类:class Base{public: void fun(){ cout <<"This is Base\n"; } int x;};声明两个派生类class ClassA : public Base{public: void fun(){原创 2013-09-01 21:59:38 · 495 阅读 · 0 评论 -
递归函数详解
以前一直搞不清楚递归函数是如何运行的,很多教科书上仅仅画出了递归函数回推(从原问题一直推导得到最简单子问题过程)和递推(从最简单的子问题往回推得到原问题的过程),看的云里雾里 ,这里我结合书本和网上的一些资料对递归进行详尽分析。先以一个例子开始,输入一个字符串s,然后倒序输出该字符串:void reverse1(char *s){ if (*s == '\0') { retu原创 2013-08-31 17:47:18 · 1255 阅读 · 0 评论 -
_ALIGN宏与内存对齐
原文地址 http://blog.sina.com.cn/s/blog_60692ff60100fhmg.html1. 原理 int a; int size = 8; 1000(bin) 计算a以size为倍数的下界数: 就让这个数(要计算的这个数)表示成二进制时,最后三位为0就可以达到这个目标。只要下面这个数与a进行"与运算转载 2013-08-28 19:39:25 · 821 阅读 · 0 评论 -
memcpy函数内部实现
一直以为memcpy函数特别容易实现,今天去面试才知道自己没有考虑地址重叠情况。以下是一种错误写法:void *mymemcpy(void *des, void *src, int size){ char *destion=des; char *source=src; while (size-->0) { *destion++=*source++; } return原创 2013-09-18 14:02:36 · 1909 阅读 · 0 评论