首页 > 代码库 > 小代码
小代码
////考虑到的BUG;//1: 输入指令不是-n或 -r//2: 输入了多次-n或-r//3:输入的指令参数个数大于2//4:-n或-r后面跟的不是数字或是负数//5:-n或-r后面可以跟带‘+’号的整数////#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<ctype.h>#include<time.h>#define N 2bool isNum(char* s);int main(int argc,char * argv[]){ int ch; opterr=1; int count=-1; int scope=-1; int key=0; while((ch=getopt(argc,argv,"n:r:"))!=-1) { key++; if(!isNum(optarg)) { printf("非法参数\n"); return -1; } switch(ch) { case ‘n‘: count=atoi(optarg); break; case ‘r‘: scope=atoi(optarg); break; default: printf("参数解析错误!\n"); return -1; } } if(key!=N||count<0||scope<=0) { printf("参数解析错误!\n"); return -1; } srand((int)time(NULL)); for(int i=0;i<count;i++) { printf("%d\n",rand()%scope); } return 0;}bool isNum(char* s){ if(s==NULL) return false; char* p=s; if(*p==‘+‘) p++; bool res=true; while(*p!=‘\0‘) { if(!isdigit(*p)) { res=false; } p++; } return res;}
#include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<string.h>#include<unistd.h>#include<time.h> #define GROUP 10int yy=10;int* tail[10];typedef struct no{ void* base; size_t num; size_t width;}node;int comp(const void *a,const void* b){ return *(int*)a-*(int*)b;}void *myq(void *n){ node* no=(node*)(n); qsort(no->base,no->num,no->width,comp);}void adjust_heap(int* p[],int n,int &yy){ int left=2*n+1; int right=2*n+2; if(n>=0&&n<yy/2) { int k=n; if(left<yy&&*p[left]<*p[k]) k=left; if(right<yy&&*p[right]<*p[k]) k=right; if(k!=n) { int *temp=p[n]; p[n]=p[k]; p[k]=temp; int* te=tail[n]; tail[n]=tail[k]; tail[k]=te; adjust_heap(p,k,yy); } }}void build_heap(int* p[]){ for(int i=yy/2-1;i>=0;i--) { adjust_heap(p,i,yy); }}int main(){ int count=0; clock_t start,end,start1; start1 = clock(); int* num=(int *)malloc(sizeof(int)); int index=0; while(EOF!=scanf("%d",&num[index])) { num=(int*)realloc(num,sizeof(int)*(index+2)); getchar(); index++; count++; } num=(int*)realloc(num,sizeof(int)*(index+1)); if(count<10) { qsort(num,count,sizeof(int),comp); for(int i=0;i<count;i++) { printf("%d\n",num[i]); } return 0; } int k=count/GROUP; int tai=k; if(k*GROUP!=count) { tai=k+count-k*GROUP; } pthread_t t[10]; for(int i=0;i<9;i++) { node *n=(node*)malloc(sizeof(node)); n->base=num+(i*k); n->num=k; n->width=sizeof(int); pthread_create(&t[i],NULL,myq,n); } node n; n.base=num+9*k; n.num=tai; n.width=sizeof(int); pthread_create(&t[9],NULL,myq,&n); for(int i=0;i<10;i++) { pthread_join(t[i],NULL); } start = clock(); int* p[10]; for(int i=0;i<10;i++) { p[i]=num+(i*k); tail[i]=&num[(i+1)*k]; } tail[9]=num+count; build_heap(p); printf("\n"); for(int i=0;i<count;i++) { printf("%d\n",*p[0]); p[0]++; if(p[0]>=tail[0]) { int* temp=p[0]; p[0]=p[yy-1]; p[yy-1]=temp; int* t=tail[0]; tail[0]=tail[yy-1]; tail[yy-1]=t; yy--; } adjust_heap(p,0,yy); } end = clock(); printf("%lf\n",(double)(end - start)/CLOCKS_PER_SEC); printf("%lf\n",(double)(end - start1)/CLOCKS_PER_SEC); return 0; }
小代码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。