摘要:Word AmalgamationTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1583Accepted Submission(s): 729Problem DescriptionIn millions of newspapers across the United States there is a word game called Jumble. The object of this game is to solve a riddle,
阅读全文
摘要:给你n个整数,请按从大到小的顺序输出其中前m大的数。Input每组测试数据有两行,第一行有两个数n,m(0//比用快排做快了200Ms#include #include inta[1000001];intmain(){ //freopen("in.txt","r",stdin); intn,m,k; while(scanf("%d%d",&n,&m)!=EOF) { memset(a,0,sizeof(a)); while(n--) { scanf("%d",&k); a[k+500000]
阅读全文
摘要:在进行堆排序之前必须知道堆的性质。堆分为大根堆和小根堆,我们只说下大根堆,小根堆其实和大根堆没多大区别:ki>=k(2i)且ki>=k(2i+1)(1≤i≤ n),当然,这是大根堆,小根堆则换成//堆排序#include #include #define swap(x,y) {int t=x;x=y;y=t;}#define N 10int len;void kph(int *a,int n)//堆的性质维护{ //该函数实现前提是:以节点n的左右孩子为根的二叉树是堆 int k=n,l,r; l=k*2; r=l+1; if(ra[k]) { swap(a[k],a[l]); k
阅读全文
摘要:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。如 设有数列{6,202,100,301,38,8,1} 初始状态: [6] [202] [100] [301] [38] [8] [1] 比较次数 i=1 [6 202 ] [ 100 301] [ 8 38] [ 1 ] 3 i=2 [ 6 100 202 301 ] [ 1 8 38 ] 4 i=3 [ 1 6 8 38 100 202 301 ] 4 总计: 11次#include #include #define...
阅读全文
摘要:程序一:#include #include #define M 10001 //看完程序后想想这个M干嘛用的,可以去看看哈希算法噢#define N 10int main(){ int a[N],b[M]; int i,n; memset(b,0,sizeof(b)); for(i=0;i#include #define M 10001#define N 10int main(){ int a[N],b[M]; int i,n; memset(b,0,sizeof(b)); for(i=0;i=0;i--) a[b[i]--]=i+1; for(i=1;i<=N;i++) printf(
阅读全文
摘要:快排,据说是平均情况下最好的排序了,算法比较好实现,快排的关键是确定轴的位置,我这里用的轴是在末尾的。 有关快排的资料可以看http://baike.baidu.com/view/19016.htm根据上图的算法思想(我觉得这种最好写代码了,呵呵)#include #define N 10#define swap(x,y) {int t=x;x=y;y=t;}void qs(int l,int r,int *a){ if(l>=r) //这是递归的出口 return; int i=l,j; for(j=l;j<r;j++) if(a[j]<a[r])//每次都是和最后那个比较
阅读全文
摘要:#include #define N 10int main(){ int a[N]; int i,j,temp; for(i=0;i#define N 10int main(){ int a[N]; int i,j,temp,flag;//添加了一个flag标志 for(i=0;i#define N 10#define swap(x,y) {int t=x;x=y;y=t;}int main(){ int a[N]; int i,j,flag=1; for(i=0;i#define N 10#define swap(x,y) {int t=x;x=y;y=t;}int main(){ ...
阅读全文
摘要:插入排序,就像好多书上讲的像抓牌时将刚抓的新牌插入手里已经排好序的牌。a数组像牌堆,b数组像已经抓到我们手里的牌#include #define N 10 //这里是定义要排序的数目int main(){ int a[N],b[N]; //定义数组,a数组用来存输入的数,b数组用来存排序的结果 int i,j; for(i=0;ia[i])//这里作比较大小(b数组从小到大排) { b[j]=b[j-1];//这里就是后移操作,毕竟是计算机,插入数据前还是要先让出空间的。 j--; } b[j]=a[i]; } for(i=0;i#define N 10int main(){ int a[N]
阅读全文