2016-01-21 131 views
0

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

#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(); 
    } 

输出:

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   

回答

0

您使用了错误的指标。试试这个:

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; 
       } 
      }   
     } 
    } 
} 

你当然可以创建两个独立的函数或重新考虑你的设计。