sdnyzjzx 发表于 2011-1-12 20:05:47

视频 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()这两个函数,中间参数的传递过程。

Finder 发表于 2011-1-13 12:48:41

站位学习,同时支持楼主

qinccckencn 发表于 2011-1-13 23:37:41

学得真好,用心了,辛苦了,我只能慢慢跟着学了,跟不上楼主了

Nisy 发表于 2011-1-14 13:24:00

接口不对哦

/* 参数:数组地址,元素个数,排序种类(字符串:ltos、stol、lx)*/

void sortlist(int * p,int total,char * ptype)
{
}

whypro 发表于 2011-1-14 19:30:34

支持楼主,佩服!

Ever.G 发表于 2011-1-15 01:00:16

没学到呢 暂时来mark一下,改天再来研究下~~
顺便膜拜下,这程序好长。。
页: [1]
查看完整版本: 视频 19 排序作业