-4

我正在尝试按递增顺序对二维数组进行排序,并将它们存储在一维数组中(从低到高)。

16 22 99 4 18
-258 4 101 5 98
105 6 15 2 45
33 88 72 16 3

但我所拥有的是不断循环,我不知道为什么

 int main()                  
 {                             
     const int SKIP=-999999;
     const int SIZE=20;
     const int ROWS=4;
     const int COLS=5;         
     int unsorted_array[ROWS][COLS]= {(16,22,99,41,18),
                                      (-258,4,101,5,98),
                                      (105,6,15,2,45),
                                      (33,88,72,16,3)};   
     int s_index=0;
     int min_value,rowMin,rowCol,row,col,colMin;
     int sorted[SIZE];

     cout <<"Array Sorted"<<endl
         <<"___________"<<endl<<endl;


 while (s_index < SIZE)
 {
     rowMin=0;
     rowCol=0;
     min_value = unsorted_array[0][0];
     row=0;
     while (row < ROWS)
     {
         col=0;
         while (col < COLS)
         {
             if (unsorted_array[row][col] < min_value)
             {
                 min_value = unsorted_array[row][col];
                 rowMin = row;
                 colMin = col;
             } 
             ;
             col = col + 1;
         }
         row = row + 1;  
     }
     sorted[s_index] = min_value; 

     while (sorted[s_index] >= 0)
     {
         cout<<" "<<sorted[s_index];
     }
     unsorted_array[rowMin][colMin]=SKIP; 
     s_index=s_index+1; 
}
cout<<endl;
4

4 回答 4

7

如果sorted[s_index] >= 0一次为真,这将是一个无限循环:

 while (sorted[s_index]>=0)
 {
     cout<<" "<<sorted[s_index];
 }

s_index 在该循环中永远不会改变。

于 2012-04-27T23:00:50.507 回答
3

这是一个问题。while 条件在循环内永远不会改变,因此如果谓词为真,循环将永远不会终止

while (sorted[s_index]>=0){
  cout<<" "<<sorted[s_index];
}  
于 2012-04-27T23:01:22.943 回答
2

如果谓词为真,这是一个明显的无限循环:

while (sorted[s_index]>=0)
   {
     cout<<" "<<sorted[s_index];

   }
于 2012-04-27T23:01:11.817 回答
1

正如其他人已经指出的那样,您的 cout 循环是无止境的。更好的使用:

     for (int i=0; i < SIZE ;i++){
         cout<<" "<<sorted[i];
     }
     cout << endl;
于 2012-04-27T23:12:33.493 回答