首页 > 解决方案 > 通过与边缘交换最大值和最小值来组织表格的程序(一直这样做直到完成)

问题描述

    #include <stdio.h>
    #include <stdlib.h>
    void minimaxi(int t[],int bs,int bi,int *ma,int *mi){
    int j;
    *ma=bi; *mi=bi;
    for(j=bi;j<=bs;j++){
    if (t[j]<t[*mi]) { *mi=j;} ;
     } 
    for(j=bi;j<=bs;j++){
    if (t[j]>t[*ma]) { *ma=j;} ;
    }

      }
    void permut(int *x, int *y){
    *x=*x+*y;
    *y=*x-*y;
    *x=*x-*y; 
     }
   void triminmax(int t[], int n){
   int bi, bs, mx, mn;
   bs=n-1;
   bi=0;
   do {
  minimaxi(t,bs,bi,&mx,&mn);
   permut(&t[mx],&t[bs]);
  permut(&t[mn],&t[bi]);
   
   bs=bs-1;
   bi++;
   }     while(bs>=bi);
     }



    int main()
    {
      int t[100], bs, bi, n, i,z;
     printf("give the table length \n");
    scanf("%d", &n);
    z=n;
    for(i=0;i<n;i++){
     printf("enter T[%d]\n", i);
    scanf("%d", t+i);
     }
     triminmax(t,n);
     for(i=0;i<z;i++){
    printf("%d\n", t[i]);
    }

    return 0;
     }

目的是创建一个使用以下内容组织表格的程序:首先找到案例 0 和案例 n-1(最后一个案例)之间的最大值和最小值,然后将最大值与案例 n-1 交换,将最小值与案例交换0 然后它查找 1 和 n-2 之间的最大值和最小值,并将它们与 1 和 n-2 交换,它会一直运行直到表被组织好 问题是当我在编译所有我发现是随机数之后打印预期的组织表时

标签: ccodeblocks

解决方案


您的代码有两个问题:

  • 您正在传递permut函数的地址,因此有可能两次传递相同的地址,因此这种情况的值等于 0

  • 并且有可能最小的数字在最后一个案例中,因此包含最大数字的案例与之切换,然后最大的数字被发送到第一个案例。因此,这是您的代码的修订版本以及其他小修复:

     #include <stdio.h>
     #include <stdlib.h>
     void permut(int *x, int *y)
     {
         *x=*x+*y;
         *y=*x-*y;
         *x=*x-*y;
     }
     void minimaxi(int t[],int bs,int bi,int *ma,int *mi)
     {
         int j;
         *ma=bi;
         *mi=bi;
    
         for(j=bi;j<=bs;j++)
             {
    
                 if (t[j]<=t[*mi])
                     *mi=j;
             }
         if (*mi!=bi) permut(&(t[*mi]),&(t[bi]));
         for(j=bi;j<=bs;j++)
         {
             if (t[j]>t[*ma])
                 *ma=j;
         }
    
         if (*ma!=bs) permut(&(t[*ma]),&(t[bs]));
    
     }
    
    void triminmax(int t[], int n)
    {
         int bi, bs, mx, mn;
         bs=n-1;
         bi=0;
         do 
         {
             minimaxi(t,bs,bi,&mx,&mn);
             bs=bs-1;
             bi++;
         }
         while(bs>=bi);
     }
    
    
    
     int main()
     {
         int *t, bs, bi, n, i,z;
         t=malloc(100*sizeof(int));
         printf("give the table length \n");
         scanf("%d", &n);
         z=n;
         for(i=0;i<n;i++)
         {
             printf("enter T[%d]\n", i);
             scanf("%d", t+i);
         }
         triminmax(t,n);
         for(i=0;i<z;i++)
         {
                 printf("%d\n", t[i]);
         }
    
         return 0;
     }
    

推荐阅读