- UID
- 65892
注册时间2010-3-1
阅读权限50
最后登录1970-1-1
感悟天道
TA的每日心情 | 慵懒 2024-12-4 10:07 |
---|
签到天数: 444 天 [LV.9]以坛为家II
|
本帖最后由 sdnyzjzx 于 2011-1-21 16:51 编辑
排序要求:
1. 从小到大
2. 从大到小
3. 乱序排列
完全按照了老师的写法,就加了个乱序排列。有时间再重新写一遍。- #define total 9
- void Intinput(int *p,int n)
- {
- int i;
- for(i = 0 ;i < n;i++)
- {
- scanf("%d",p+i);
- }
- }
-
- void Showintlist(int * p,int n)
- {
- int i;
- for(i = 0 ;i < n;i++)
- {
- printf("%d ",*(p+i));
- }
- printf("\n");
- }
-
- int Islarge(int a,int b)
- {
- return a>b ? 1 : 0;
- }
-
- int Issmall(int a,int b)
- {
- return a<b ? 1 : 0;
- }
-
-
- void Changeint(int *a,int *b)
- {
- int temp = 0;
- temp = *a ;
- *a = *b;
- *b = temp;
- }
- /* 从小到大排序 */
- void Sortstol(int * p,int n)
- {
- int i=0,j = 0;
-
- for(j = 0;j <n -1;j++)
- {
- for( i =0 ; i<n-j-1;i++)
- {
- if( Islarge(*(p+i) , *(p+i+1)) )
- {
- Changeint(p+i , p+i+1);
- }
- }
- }
- }
-
- /* 从大到小排序 */
- void Sortltos(int * p,int n)
- {
- int i=0,j = 0;
-
- for(j = 0;j <n -1;j++)
- {
- for( i =0 ; i<n-j-1;i++)
- {
- if( Issmall(*(p+i) , *(p+i+1)) )
- {
- Changeint(p+i , p+i+1);
- }
- }
- }
- }
- /* 乱序 排序 */
- void Sortlx(int * p,int n)
- {
- int i=0;
- int * p2 = (int *)malloc(total * sizeof(int));
- Sortstol(p,total);
- for(i=0;i<n;)
- {
- *(p2+i) = *(p+i/2);
- *(p2+i+1) = *(p+n-(i+2)/2);
- i=i+2;
- }
- for(i=0;i<n;i++)
- {
- *(p+i) = *(p2+i);
- }
- }
- void main()
- {
- int * p = (int *)malloc(total * sizeof(int));
- printf("Please input num: \n");
- Intinput(p,total);
-
- printf("The numlist is: \n");
- Showintlist(p,total);
-
- Sortstol(p,total);
- printf("The new num stol is: \n");
- Showintlist(p,total);
- Sortltos(p,total);
- printf("The new num ltos is: \n");
- Showintlist(p,total);
- Sortlx(p,total);
- printf("The new num lx is: \n");
- Showintlist(p,total);
-
- free(p);
- return ;
- }
复制代码
=============================================================================================
第N次重写,时间18分钟,距离15分钟还有一断距离。- #define total 9
- _input(int *p, int n)
- {
- int i=0;
- for(i=0;i<n;i++)
- {
- scanf("%d",p+i);
- }
- }
- _show(int *p, int n)
- {
- int i=0;
- for(i=0;i<n;i++)
- {
- printf("%d ",*(p+i));
- }
- }
- _issmall(int a, int b)
- {
- return a<b ? 1:0 ;
- }
- _islarge(int a, int b)
- {
- return a>b ? 1:0 ;
- }
- _change(int *a , int *b)
- {
- int temp = 0 ;
- temp = *a ;
- *a = *b ;
- *b =temp ;
- }
- _sort(int *p,int n, char type)
- {
- int *p2 = (int *)malloc( total * sizeof(int));
- int i=0,j=0;
- if(type == 's')
- {
- for(i=0;i<n-1;i++)
- {
- for(j=0;j<n-i-1;j++)
- {
- if(_islarge(*(p+j),*(p+j+1)))
- {
- _change(p+j,p+j+1);
- }
- }
- }
- }
- else if(type == 'l')
- {
- for(i=0;i<n-1;i++)
- {
- for(j=0;j<n-i-1;j++)
- {
- if(_issmall(*(p+j),*(p+j+1)))
- {
- _change(p+j,p+j+1);
- }
- }
- }
- }
- else if(type == 'x')
- {
- _sort(p,total,'s');
- for(i=0;i<n;i+=2)
- {
- *(p2+i)= *(p+i/2);
- }
- for(i=0;i<n-1;i+=2)
- {
- *(p2+i+1)= *(p+n-(i+2)/2);
- }
- for(i=0;i<n;i++)
- {
- *(p+i) = *(p2+i);
- }
- }
- free(p2);
- }
- void main()
- {
- int *p = (int *)malloc( total * sizeof(int));
- clrscr();
- printf("Please input 9 num : ");
- _input(p,total);
- printf("\n");
- printf("Your input is : ");
- _show(p,total);
- printf("\n");
- printf("small to large is : ");
- _sort(p,total,'s');
- _show(p,total);
- printf("\n");
- printf("large to small is : ");
- _sort(p,total,'l');
- _show(p,total);
- printf("\n");
- printf("luan xu is : ");
- _sort(p,total,'x');
- _show(p,total);
- printf("\n");
- free(p);
- return;
- }
复制代码 ======================================================================================================
学习了老师的思路,自己再次写的代码。- #define total 10
- int Input(int *p,int n)
- {
- int i;
- for(i=0;i<n;i++)
- {
- scanf("%d",p+i);
- }
- }
- int Show(int *p,int n)
- {
- int i;
- for(i=0;i<n;i++)
- {
- printf("%d ",*(p+i));
- }
- printf("\n");
- }
- int Issmall(int a, int b )
- {
- return a < b ? 1 : 0 ;
- }
- int Islarge(int a, int b )
- {
- return a > b ? 1 : 0 ;
- }
- void Change(int *a ,int *b)
- {
- int temp;
- temp = *a;
- *a = *b;
- *b = temp;
- }
- int Mystrcmp(char *str1,char * str2)
- {
- int i =0;
- while( *(str1+i) == *(str2+i) )
- {
- if( *(str1+i) == 0 && *(str2+i) == 0 )
- return 1;
- i++;
- }
- return 0 ;
- }
- int Gettype(char *type, char ** stype)
- {
- int i=0;
- while(*stype)
- {
- if(Mystrcmp(type,*(stype+i)))
- {
- return i ;
- }
- i++;
- }
- return -1 ;
- }
- void Sort(int *p,int n,char *type)
- {
- char * stype[] = {"stol","ltos","lx"};
- int ntype = Gettype(type,stype);
- int i,j;
- for(i=0;i<n-1;i++)
- {
- for(j=0;j<n-i-1;j++)
- {
- switch(ntype)
- {
- case 0 :
- if(Islarge(*(p+j),*(p+j+1)))
- {
- Change(p+j,p+j+1);
- }
- break;
- case 1 :
- if(Issmall(*(p+j),*(p+j+1)))
- {
- Change(p+j,p+j+1);
- }
- break;
- case 2 :
- if(i%2)
- {
- if(Issmall(*(p+j),*(p+j+1)))
- {
- Change(p+j,p+j+1);
- }
- }
- else
- {
- if(Islarge(*(p+j),*(p+j+1)))
- {
- Change(p+j,p+j+1);
- }
- }
- break;
- default:
- break ;
- }
- }
- }
- }
- void main()
- {
- int * p =(int *)malloc(sizeof(int) * total);
- if(!p)
- return;
- clrscr();
- printf("Please input 10 num : ");
- Input(p,total);
- printf("Your input is : ");
- Show(p,total);
- printf("Sort small to large is :");
- Sort(p,total,"stol");
- Show(p,total);
- printf("Sort large to small is :");
- Sort(p,total,"ltos");
- Show(p,total);
- printf("Sort luan xu is : ");
- Sort(p,total,"lx");
- Show(p,total);
- if(p)
- free(p);
- }
复制代码 还要进一步理解 Gettype( )、Mystrcmp( )这两个函数,中间参数的传递过程。 |
|