视频 19 排序作业
本帖最后由 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()这两个函数,中间参数的传递过程。 站位学习,同时支持楼主 学得真好,用心了,辛苦了,我只能慢慢跟着学了,跟不上楼主了 接口不对哦
/* 参数:数组地址,元素个数,排序种类(字符串:ltos、stol、lx)*/
void sortlist(int * p,int total,char * ptype)
{
} 支持楼主,佩服! 没学到呢 暂时来mark一下,改天再来研究下~~
顺便膜拜下,这程序好长。。
页:
[1]