首页 > 代码库 > 小代码

小代码

////考虑到的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;   }

  

小代码