算法
文章平均质量分 58
博学厚德
天行健君子以自强不息地势坤君子以厚德载物
展开
-
分治法--最大连续序列和
分治法思想: 1.将问题划分为子问题的求解问题 2.递归求解子问题 3.将子问题的解合并,得到全局解 例子:最大连续和问题代码如下: #include #define MAX 10000 int maxsum(int a[],int x,int y) { int m,max,l,r,max1,max2,v; if(y-x==1) retu原创 2013-03-31 20:59:10 · 2145 阅读 · 0 评论 -
分治法--合并排序
合并排序牺牲O(n)的空间 代码如下: #include int A[1000000]; int B[1000000]; void mergesort(int a[],int x,int y,int b[]) { if(y-x>1) { int m,p,q; m=x+(y-x)/2; mergesort(a,x,m,b);原创 2013-04-01 12:08:48 · 432 阅读 · 0 评论 -
二分查找
二分查找算法适合于有序序列的查找: 代码如下: #include int A[100000]; int bsearch(int a[],int x,int y,int v); void main() { int n,v,flag; scanf("%d%d",&n,&v); for(int i=0;i<n;i++) scanf("%d",&A[i])原创 2013-04-01 12:21:50 · 475 阅读 · 0 评论 -
STL中sort()函数的使用
c++标准库中的sort()函数,可以直接进行对一直数组进行排序。另外还有库函数lower_bound()可以直接实现查找一个元素在有序数组中第一次出现的位置。和(upper_bound())最后一次出现的下一个位置。 实例如下: #include #include //#include using namespace std; int v[10000]; void原创 2013-04-01 13:03:55 · 571 阅读 · 0 评论 -
递归--循环日程表问题
#include #include #include #define MAX 1024 int a[MAX][MAX]; void schedule(int a[][1024],int k); void main() { int k; scanf("%d",&k); memset(a,0,sizeof(a[0][0])); schedule(a,k);原创 2013-04-02 15:56:07 · 723 阅读 · 0 评论 -
华为上机笔试之通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。 压缩规则: 1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。 2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。 要求实原创 2013-10-04 15:41:34 · 2912 阅读 · 0 评论 -
分治法--快速排序
1. #include #define MAX 1000005 int a[MAX]; void sort(int a[], int p, int q) { int l = p, r = q, x = a[(p+q)/2], t; while (l < r) { while (a[l] < x) l++; while (a[r] > x) r--; if (l <= r)原创 2013-04-01 22:15:19 · 490 阅读 · 0 评论 -
冒泡排序,选择排序,快速排序,插入排序,折半选择排序
#include #define MAX 1000 using namespace std; //简单插入排序 void InsertSort(int a[],int len) { for(int i=1;i<len;i++) { int j; int temp; for(j=i-1;(j>=0)&&(a[j]>a[i]);j--) ; temp=a[i]; for(原创 2013-10-06 22:05:08 · 764 阅读 · 0 评论 -
合并排序
#include #define MAX 1000 using namespace std; //合并排序 void Merg(int a[],int b[],int l,int m,int r)//将a中两个区间归并到b中 { int index=l; int i; int j; for( i=l, j=m+1;i<=m&&j<=r;index++) { if(a[i]<a[j])原创 2013-10-06 23:08:01 · 872 阅读 · 0 评论