- UID
 - 59317
 
 注册时间2009-1-28
阅读权限40
最后登录1970-1-1
独步武林 
   
 
 
 
TA的每日心情  | 无聊 2024-1-15 22:57 | 
|---|
 
  签到天数: 3 天 [LV.2]偶尔看看I  
 | 
 
 本帖最后由 zaas 于 2011-1-14 22:50 编辑  
- #include <stdio.h>
 
 - #include <stdlib.h>
 
 - int Numinput(int *p,int i);
 
 - void Print(int *p,int i);
 
 - void Ascending(int *p,int i);
 
 - void Descending(int *p,int i);
 
 - void Random(int *p,int i);
 
 - int Sort (int *p,int i,char * method);
 
 - void Change(int *a,int *b);
 
 - int Big(int a,int b);
 
 - int Small(int a,int b);
 
 - void main()
 
 - {
 
 -         int i;
 
 -         int flag;
 
 -         int *p;
 
 -         char  method[10];
 
 -         printf("how many nums?\n");
 
 -         flag=scanf("%d",&i);
 
 -         if (!flag)
 
 -         {
 
 -                 printf("error num!\n");
 
 -                 return;
 
 -         }
 
 -         p= (int * )malloc(i*sizeof(int));
 
 -         flag=Numinput(p,i);
 
 -         if (!flag)
 
 -         {
 
 -                 printf("error num!\n");
 
 -                 free(p);
 
 -                 return;
 
 -         }
 
 -         printf("Ascending/Descending/Random?\n");
 
 -         scanf("%10s",method);
 
 -         printf("Original:\n");
 
 -         Print(p,i);
 
 -         flag=Sort(p,i,method);
 
 -         if (!flag)
 
 -         {
 
 -                 printf("error method!\n");
 
 -                 free(p);
 
 -                 return;
 
 -         }
 
 -         printf("Sorted:\n");
 
 -         Print(p,i);
 
 -         free(p);        
 
 - }
 
 - int Numinput(int *p,int i)
 
 - {
 
 -         int j;
 
 -         int flag;
 
 -         printf("input nums:\n");
 
 -         for (j=0;j<i;j++)
 
 -         {
 
 -                 flag=scanf("%d",p+j);
 
 -                 if (!flag)
 
 -                 {
 
 -                         return(0);
 
 -                 }
 
 -         }
 
 -         return(1);
 
 - }
 
 - void Print(int *p,int i)
 
 - {
 
 -         int j;
 
 -         for (j=0;j<i;j++)
 
 -         {
 
 -                 printf("%d ",*(p+j));
 
 -         }
 
 -         printf("\n");
 
 - }
 
 - int Sort (int *p,int i,char * method)
 
 - {
 
 -         switch (*method)
 
 -         {
 
 -         case 'A':
 
 -                 Ascending(p,i);
 
 -                 return(1);
 
 -         case 'a':
 
 -                 Ascending(p,i);
 
 -                 return(1);
 
 -         case 'D':
 
 -                 Descending(p,i);
 
 -                 return(1);
 
 -         case 'd':
 
 -                 Descending(p,i);
 
 -                 return(1);
 
 -         case 'R':
 
 -                 Random(p,i);
 
 -                 return(1);
 
 -         case 'r':
 
 -                 Random(p,i);
 
 -                 return(1);
 
 -         default:
 
 -                 return(0);
 
 -         }
 
 - }
 
 - void Ascending(int *p,int i)
 
 - {
 
 -         int j,k;
 
 -         for (j=0;j<i;j++)
 
 -         {
 
 -                 for (k=0;k<i-j-1;k++)
 
 -                 {
 
 -                         if (Big(*(p+k),*(p+k+1)))
 
 -                         {
 
 -                                 Change(p+k,p+k+1);
 
 -                         }                        
 
 -                 }
 
 -         }
 
 - }
 
 - void Change(int *a,int *b)
 
 - {
 
 -         int temp;
 
 -         temp=*a;
 
 -         *a=*b;
 
 -         *b=temp;
 
 - }
 
 - int Big(int a,int b)
 
 - {
 
 -         return a>b?1:0;
 
 - }
 
 - int Small(int a,int b)
 
 - {
 
 -         return a<b?1:0;
 
 - }
 
 - void Descending(int *p,int i)
 
 - {
 
 -         int j,k;
 
 -         for (j=0;j<i;j++)
 
 -         {
 
 -                 for (k=0;k<i-j-1;k++)
 
 -                 {
 
 -                         if (Small(*(p+k),*(p+k+1)))
 
 -                         {
 
 -                                 Change(p+k,p+k+1);
 
 -                         }                        
 
 -                 }
 
 -         }
 
 - }
 
 - void Random(int *p,int i)
 
 - {
 
 -         int j;
 
 -         int *rnd= (int * )malloc(i*sizeof(int));
 
 -         Ascending(p,i);
 
 -         for (j=0;j<=i/2;j++)
 
 -         {                
 
 -                 *(rnd+2*j)=*(p+j);
 
 -                 *(rnd+2*j+1)=*(p+i-j-1);
 
 -         }
 
 -         for (j=0;j<i;j++)
 
 -         {
 
 -                 *(p+j)=*(rnd+j);
 
 -         }
 
 -         free(rnd);
 
 - }
 
 
  复制代码 |   
 
 
 
 |