首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二维数组中的插入排序

二维数组中的插入排序
EN

Stack Overflow用户
提问于 2016-01-21 19:16:51
回答 1查看 3.4K关注 0票数 0

使用Borland Turbo C++,我编写了这个程序来演示二维数组中的插入排序。输出是错误的,似乎有一个逻辑错误,我找不到。这里的插入排序算法是按升序对所有偶数行排序,而对所有奇数行按降序排序。sort()函数应该分解为evensort()和oddsort()吗?

代码语言:javascript
复制
   #include<iostream.h>
   #include<conio.h>
   #include<stdio.h>

   int num[5][3];
   int i, j,r,c;

   void input(int r, int c)
   { cout<<"Enter the elements into the array"<<endl;
     for(i=0; i<r; i++)
       for(j=0; j<c;j++)
         cin>>num[i][j];
    }
   void sort(int r, int c)
     { for(i=0; i<r; i++)
        { for(j=0; j<c; j++)
           if(i%2==0)
           {  int min=num[i][j],pos=i;
 for(int k=i+1; k<r; k++ )
  { if(num[k][j]<min)
num[k][j]=min;
pos=k;
   }
 num[pos][j]=num[i][j];
 num[i][j]=min;
 }
else
{  int max=num[i][j],pos1=i;
 for(int l=i+1; l<r; l++ )
  { if(num[l][j]>max)
num[l][j]=max;
pos1=l;
   }
 num[pos1][j]=num[i][j];
 num[i][j]=max;
 }
}
}
 void display(int r, int c)
   { cout<<endl<<"Array  is"<<endl;
     for(i=0; i<r; i++)
      { cout<<"\n";
        for(j=0; j<c;j++)
         {
            cout<<num[i][j]<<"\t";
          }
    }
   }
 void main()
   { clrscr();
   cout<<"Enter the no of rows"<<endl;
   cin>>r;
   cout<<"Enter the no of columns"<<endl;
   cin>>c;
   if(r<=5 && c<=3)
    { input(r,c);
     cout<<" Before sorting"<<endl;
     display(r,c);
     sort(r,c);
     cout<<"\n After sorting"<<endl;
     display(r,c);
    }
    else cout<<"Invalid no of rows and columns";
    getch();
    }

输出:

代码语言:javascript
复制
 Enter the number of rows
    4
   Enter the number of columns 
    3
   Enter the elements into the array
    1 2 3 4 5 6 7 8 9 10 11 12
    Array before sorting is
     1  2   3
     4  5   6
     7  8   9
     10 11 12
    Array after sorting is
    1  2  3
    4  5  6
    4  5  6
    4  5  6        
EN

回答 1

Stack Overflow用户

发布于 2016-01-21 21:00:17

您使用了错误的索引。试试这个:

代码语言:javascript
复制
for ( i = 0; i < r; ++i ) {
    if ( i % 2  ==  0 ) {
        for ( j = 0; j < c; ++j ) { // ascending order
            min = num[i][j];
            for ( k = j + 1; k < c; ++k ) {
                if ( num[i][k] < min ) { // just switch the values
                    min = num[i][k];
                    num[i][k] = num[i][j];  
                    num[i][j] = min;
                }
            }
        }
    } else {
        for ( j = 0; j < c; ++j ) { // descending order
            max = num[i][j];
            for ( k = j + 1; k < c; ++k ) {
                if ( num[i][k] > max ) { 
                    max = num[i][k];
                    num[i][k] = num[i][j];
                    num[i][j] = max;  
                }
            }        
        }
    }
}

当然,您可以创建两个单独的函数,也可以完全重新考虑您的设计。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34922328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档