飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3367|回复: 5

[C/C++] 视频 19 排序作业

[复制链接]
  • TA的每日心情
    开心
    2024-3-7 15:25
  • 签到天数: 442 天

    [LV.9]以坛为家II

    发表于 2011-1-12 20:05:47 | 显示全部楼层 |阅读模式
    本帖最后由 sdnyzjzx 于 2011-1-21 16:51 编辑

    排序要求:
    1. 从小到大
    2. 从大到小
    3. 乱序排列

    完全按照了老师的写法,就加了个乱序排列。有时间再重新写一遍。
    1. #define total 9

    2.   void Intinput(int *p,int n)
    3.   {
    4.   int i;
    5.             for(i = 0 ;i < n;i++)
    6.           {
    7.           scanf("%d",p+i);
    8.         }
    9.   }
    10.   
    11.   void Showintlist(int * p,int n)
    12.   {
    13.   int i;
    14.           for(i = 0 ;i < n;i++)
    15.           {
    16.           printf("%d ",*(p+i));
    17.           }
    18.           printf("\n");
    19.   }

    20. int Islarge(int a,int b)
    21. {
    22. return a>b ? 1 : 0;
    23. }
    24.   
    25. int Issmall(int a,int b)
    26. {
    27. return a<b ? 1 : 0;
    28. }


    29. void Changeint(int *a,int *b)
    30. {
    31. int temp = 0;
    32. temp = *a ;
    33. *a = *b;
    34. *b = temp;
    35. }

    36.   /* 从小到大排序  */

    37. void Sortstol(int * p,int n)
    38. {
    39.   int i=0,j = 0;
    40.   
    41.   for(j = 0;j <n -1;j++)
    42.   {
    43.           for( i =0 ; i<n-j-1;i++)
    44.           {
    45.                    if( Islarge(*(p+i) , *(p+i+1)) )
    46.                   {
    47.                 Changeint(p+i , p+i+1);
    48.                   }
    49.           }
    50.   }
    51. }

    52.   /* 从大到小排序  */

    53. void Sortltos(int * p,int n)
    54. {
    55.   int i=0,j = 0;
    56.   
    57.   for(j = 0;j <n -1;j++)
    58.   {
    59.           for( i =0 ; i<n-j-1;i++)
    60.           {
    61.                    if( Issmall(*(p+i) , *(p+i+1)) )
    62.                   {
    63.                 Changeint(p+i , p+i+1);
    64.                   }
    65.           }
    66.   }
    67. }

    68.   /* 乱序 排序  */

    69. void Sortlx(int * p,int n)
    70. {
    71.   int i=0;
    72.   int * p2 = (int *)malloc(total * sizeof(int));
    73.   Sortstol(p,total);
    74.   for(i=0;i<n;)
    75.   {
    76.   *(p2+i) = *(p+i/2);
    77.   *(p2+i+1) = *(p+n-(i+2)/2);
    78.   i=i+2;
    79.   }

    80. for(i=0;i<n;i++)
    81. {
    82. *(p+i) = *(p2+i);
    83. }

    84. }
    85.   void main()
    86.   {

    87.   int * p = (int *)malloc(total * sizeof(int));

    88.   printf("Please input num: \n");
    89.   Intinput(p,total);
    90.   
    91.   printf("The numlist is: \n");
    92.   Showintlist(p,total);

    93.   Sortstol(p,total);
    94.   printf("The new num stol is: \n");
    95.   Showintlist(p,total);

    96.   Sortltos(p,total);
    97.   printf("The new num ltos is: \n");
    98.   Showintlist(p,total);


    99.   Sortlx(p,total);
    100.   printf("The new num lx is: \n");
    101.   Showintlist(p,total);
    102.   
    103.   free(p);

    104.   return ;
    105.   }
    复制代码
    paixu.jpg

    =============================================================================================
    第N次重写,时间18分钟,距离15分钟还有一断距离。
    1. #define total 9

    2. _input(int *p, int n)
    3. {
    4.         int i=0;
    5.         for(i=0;i<n;i++)
    6.         {
    7.         scanf("%d",p+i);
    8.         }
    9. }
    10. _show(int *p, int n)
    11. {
    12.         int i=0;
    13.         for(i=0;i<n;i++)
    14.         {
    15.         printf("%d ",*(p+i));
    16.         }
    17. }

    18. _issmall(int a, int b)
    19. {
    20. return a<b ? 1:0 ;
    21. }

    22. _islarge(int a, int b)
    23. {
    24. return a>b ? 1:0 ;
    25. }

    26. _change(int *a , int *b)
    27. {
    28. int temp = 0 ;
    29. temp = *a ;
    30. *a = *b ;
    31. *b =temp ;
    32. }

    33. _sort(int *p,int n, char type)
    34. {
    35. int *p2 = (int *)malloc( total * sizeof(int));
    36. int i=0,j=0;

    37.         if(type == 's')
    38.         {
    39.                 for(i=0;i<n-1;i++)
    40.                 {
    41.                         for(j=0;j<n-i-1;j++)
    42.                         {
    43.                                 if(_islarge(*(p+j),*(p+j+1)))
    44.                                 {
    45.                                 _change(p+j,p+j+1);
    46.                                 }
    47.                         }
    48.                 }
    49.         }
    50.         else if(type == 'l')
    51.                 {
    52.                 for(i=0;i<n-1;i++)
    53.                 {
    54.                         for(j=0;j<n-i-1;j++)
    55.                         {
    56.                                 if(_issmall(*(p+j),*(p+j+1)))
    57.                                 {
    58.                                 _change(p+j,p+j+1);
    59.                                 }
    60.                         }
    61.                 }
    62.         }
    63.                 else if(type == 'x')
    64.                 {
    65.                 _sort(p,total,'s');
    66.                         for(i=0;i<n;i+=2)
    67.                         {
    68.                         *(p2+i)= *(p+i/2);
    69.                         }
    70.                         for(i=0;i<n-1;i+=2)
    71.                         {
    72.                         *(p2+i+1)= *(p+n-(i+2)/2);
    73.                         }
    74.                         for(i=0;i<n;i++)
    75.                         {
    76.                         *(p+i) = *(p2+i);
    77.                         }                       
    78.                 }
    79.                 free(p2);
    80. }

    81. void main()
    82. {
    83. int *p = (int *)malloc( total * sizeof(int));

    84. clrscr();
    85. printf("Please input 9 num : ");
    86. _input(p,total);
    87. printf("\n");

    88. printf("Your input is : ");
    89. _show(p,total);
    90. printf("\n");

    91. printf("small to large is : ");
    92. _sort(p,total,'s');
    93. _show(p,total);
    94. printf("\n");

    95. printf("large to small is : ");
    96. _sort(p,total,'l');
    97. _show(p,total);
    98. printf("\n");

    99. printf("luan   xu   is : ");
    100. _sort(p,total,'x');
    101. _show(p,total);
    102. printf("\n");

    103. free(p);
    104. return;
    105. }
    复制代码
    ======================================================================================================
    学习了老师的思路,自己再次写的代码。
    1. #define total 10
    2. int Input(int *p,int n)
    3. {
    4. int i;
    5.         for(i=0;i<n;i++)
    6.         {
    7.         scanf("%d",p+i);       
    8.         }       
    9. }

    10. int Show(int *p,int n)
    11. {
    12.         int i;
    13.         for(i=0;i<n;i++)
    14.         {
    15.         printf("%d ",*(p+i));       
    16.         }       
    17.         printf("\n");
    18. }

    19. int Issmall(int a, int b )
    20. {
    21. return a < b ? 1 : 0 ;       
    22. }

    23. int Islarge(int a, int b )
    24. {
    25. return a > b ? 1 : 0 ;       
    26. }

    27. void Change(int *a ,int *b)
    28. {
    29. int temp;
    30. temp = *a;
    31. *a =  *b;
    32. *b = temp;       
    33. }

    34. int Mystrcmp(char *str1,char * str2)
    35. {
    36.         int i =0;
    37.         while( *(str1+i) == *(str2+i) )
    38.         {
    39.                 if( *(str1+i) == 0 && *(str2+i) == 0  )       
    40.                         return 1;
    41.                         i++;
    42.         }
    43.         return 0 ;
    44. }

    45. int Gettype(char *type, char ** stype)
    46. {
    47.         int i=0;
    48.         while(*stype)
    49.         {
    50.                 if(Mystrcmp(type,*(stype+i)))       
    51.                         {
    52.                         return i ;
    53.                         }
    54.                         i++;       
    55.         }
    56.                         return -1 ;
    57. }

    58. void Sort(int *p,int n,char *type)
    59. {
    60. char * stype[] = {"stol","ltos","lx"};       
    61. int ntype = Gettype(type,stype);
    62. int i,j;
    63.         for(i=0;i<n-1;i++)
    64.         {
    65.                 for(j=0;j<n-i-1;j++)
    66.                 {
    67.                         switch(ntype)
    68.                         {
    69.                                 case 0 :
    70.                                         if(Islarge(*(p+j),*(p+j+1)))
    71.                                                 {
    72.                                                         Change(p+j,p+j+1);
    73.                                                 }
    74.                                                 break;
    75.                                 case 1 :
    76.                                         if(Issmall(*(p+j),*(p+j+1)))
    77.                                                 {
    78.                                                         Change(p+j,p+j+1);
    79.                                                 }
    80.                                                 break;
    81.                                 case 2 :
    82.                                         if(i%2)
    83.                                                 {
    84.                                                         if(Issmall(*(p+j),*(p+j+1)))
    85.                                                                 {
    86.                                                                         Change(p+j,p+j+1);
    87.                                                                 }
    88.                                                 }
    89.                                         else
    90.                                                 {
    91.                                                         if(Islarge(*(p+j),*(p+j+1)))
    92.                                                                 {
    93.                                                                         Change(p+j,p+j+1);
    94.                                                                 }
    95.                                                 }
    96.                                                 break;
    97.                                 default:
    98.                                         break ;
    99.                         }
    100.                 }       
    101.         }
    102. }

    103. void main()
    104. {
    105. int * p =(int *)malloc(sizeof(int) * total);
    106. if(!p)
    107.         return;
    108. clrscr();
    109. printf("Please input 10 num : ");
    110. Input(p,total);

    111. printf("Your input is : ");
    112. Show(p,total);

    113. printf("Sort small to large is :");
    114. Sort(p,total,"stol");
    115. Show(p,total);

    116. printf("Sort large to small is :");
    117. Sort(p,total,"ltos");
    118. Show(p,total);

    119. printf("Sort luan xu is : ");
    120. Sort(p,total,"lx");
    121. Show(p,total);

    122. if(p)
    123.         free(p);
    124. }
    复制代码
    还要进一步理解 Gettype( )、Mystrcmp(  )这两个函数,中间参数的传递过程。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2011-1-13 12:48:41 | 显示全部楼层
    站位学习,同时支持楼主
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    昨天 20:23
  • 签到天数: 1814 天

    [LV.Master]伴坛终老

    发表于 2011-1-13 23:37:41 | 显示全部楼层
    学得真好,用心了,辛苦了,我只能慢慢跟着学了,跟不上楼主了
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2011-1-14 13:24:00 | 显示全部楼层
    接口不对哦

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

    void sortlist(int * p,int total,char * ptype)
    {
    }
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-3-12 17:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2011-1-14 19:30:34 | 显示全部楼层
    支持楼主,佩服!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2011-1-15 01:00:16 | 显示全部楼层
    没学到呢 暂时来mark一下,改天再来研究下~~
    顺便膜拜下,这程序好长。。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表