算法
Beta-
这个作者很懒,什么都没留下…
展开
-
分治算法—合并排序
分治策略就是将原问题划分成n个规模较小而结构与原问题相似的子问题;递归的解决这些子问题,然后再合并其结果,就得到原问题的解。合并排序完全按照分治模式,在每一层的递归上都有三个步骤: 1.分解:将n个元素分成各含n/2个元素的子序列; 2.解决:用合并排序法对两个子序列递归的排序; 3.合并:合并两个已排序的子序列以得到排序结果。 算法: void Merge(int B[]原创 2012-03-10 20:11:48 · 749 阅读 · 0 评论 -
堆优先级队列
优先级队列可以用堆表示。在一个给定的作业调度或者基于事件驱动的模型中,优先级队列的元素对应着应用中的对象。通常,我们需要确定一个给定的队列中元素所对应的应用对象。当用堆来实现优先级队列时,需要在堆中的每个元素里存储对应应用对象的柄(handle)。下面讨论如何实现基于堆的最大优先级队列。#include using namespace std; int size=0;void Ma原创 2012-05-19 19:25:42 · 368 阅读 · 0 评论 -
二分查找
#include using namespace std;int Binary_search(int A[],int n,int k){ int left=0,right=n-1; while (left<=right) { int middle=(left+right)/2; if (k==A[middle]) { return middle; } else原创 2012-05-07 21:19:11 · 306 阅读 · 0 评论 -
堆排序
#include using namespace std;void Maxheapify(int A[],int i,int size){ int left=2*i,right=2*i+1,largest; if (leftA[i]) { largest=left; } else { largest=i; } if (rightA[largest]) { lar原创 2012-05-07 21:18:29 · 461 阅读 · 0 评论 -
合并排序
#include using namespace std;void merge(int A[],int p,int q,int r){ int i=p,j=q+1,k=0; int *temp=new int[10]; while (i<=q&&j<=r) { if (A[i]<A[j]) { temp[k++]=A[i++]; } else {原创 2012-05-06 20:25:14 · 377 阅读 · 0 评论 -
链表的就地逆置
#include using namespace std; /*结构体*/typedef struct LNode { int data; struct LNode *next;}LNode,*linklist;void reverse(linklist &L){//逆向输出函数 linklist p,q; p=L->next; L->next=NULL; wh原创 2012-03-20 17:52:22 · 388 阅读 · 0 评论 -
递归与非递归插入排序
插入排序使用增量方法:在排好序的数组A[1...j-1]后,将元素A[j]插入,形成排好序的子数组A[1.....j].下面将介绍使用递归和非递归的方法进行插入排序 1.非递归插入排序: insert_sort(A){for j ← 2 to length[A]do key ← A[j]i ← j-1while i>0 and A[i]>key do A[i+1]原创 2012-03-16 21:03:08 · 458 阅读 · 0 评论 -
哥德巴赫猜想-一个偶数可以表示为两个素数之和
#include #include using namespace std;int main(){ int even,prime1,temp,prime2; cin>>even;//输入一个偶数 for (prime1=3;prime1<=even/2;prime1+=2)//判断两个素数 { for (temp=2;temp<=sqrt(prime1);te原创 2012-03-29 16:37:30 · 2605 阅读 · 0 评论 -
八进制转十进制
#include using namespace std;int main(){ //八进制转十进制 char *p,s[6]; int n; p=s;//初始化字符串指针 cin>>p; n=0; while (*(p)!='\0') { n=n*8+*p-'0';//*p是字符,所以要减去'0',即减去48 p++; } cout<<n<<endl;原创 2012-03-29 15:37:42 · 592 阅读 · 0 评论 -
ACM各个阶段的一些基本要求
OJ上的一些水题(可用来练手和增加自信)(poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法.转载 2012-03-29 21:27:59 · 593 阅读 · 0 评论 -
快速排序
快速排序像合并排序一样,也是基于分治模式的。#include using namespace std;int partition(int A[],int p,int r);void QuickSort(int A[],int p,int r){ int q; if (p<r) { q=partition(A,p,r); QuickSort(A,p,q-1); Quick原创 2012-05-21 22:12:03 · 459 阅读 · 0 评论