- 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);
- }
复制代码 |
|