2015-11-10 30 views
1

這是按m列排列m乘n矩陣的正確方法嗎?謝謝。選擇種類最適合這個嗎?多列數組中的列排序

排序是m×n個雙精度值

for (int j = 0; j < sorted[0].length; j++) 
    { 

    for (int i = 0; i < sorted.length - 1; i++) 
    { 

     double currentMin = sorted[i][j]; 
     int minIndex = i; 

     for (int row = i + 1; row < sorted.length; row++) 
     { 

      if (currentMin > sorted[row][j]) 
      { 
       currentMin = sorted[row][j]; 
       minIndex = row; 
      } 
     } 
     if (minIndex != i) 
     { 
      sorted[minIndex][j] = sorted[i][j]; 
      sorted[i][j] = currentMin; 
     } 

    } 
    } 
    return sorted; 

}

+0

這是一個選擇排序,而不是冒泡排序。選擇排序*從尚未排序的值中選擇下一個值,然後與目標位置中的任何值交換(每個元素交換一次)。在冒泡排序中,該值與當前位置和目標位置之間的每個元素交換(每個元素最多n次交換)。您的代碼選擇按升序對2D陣列的每列進行排序。 – Aderis

回答

0

的數組編號的我的代碼,這樣我可以方便地引用它的一部分在我的描述。

1. for (int j = 0; j < sorted[0].length; j++) 
    { 

2.  for (int i = 0; i < sorted.length - 1; i++) 
    { 

3.  double currentMin = sorted[i][j]; 
3.  int minIndex = i; 

4.  for (int row = i + 1; row < sorted.length; row++) 
     { 

5.   if (currentMin > sorted[row][j]) 
      { 
       currentMin = sorted[row][j]; 
       minIndex = row; 
      } 
     } 
6.  if (minIndex != i) 
     { 
      sorted[minIndex][j] = sorted[i][j]; 
      sorted[i][j] = currentMin; 
     } 

    } 
    } 
    return sorted; 
} 
  1. 遍歷所有的列
  2. 遍歷所有
  3. 設置當前最小和最低指數的第一個項目正在檢查的行。這是爲了防止它們是實際的最小值。而且,隨着我們的前進,我們有一些東西需要檢查。
  4. 迭代所有以尚未排序的行開始的行。
  5. 如果當前最小值大於當前列,並且通過#4遞增行(此處僅遞增行),則相應地設置當前最小值和最小值索引
  6. 這是所有行都經過檢查最低值。如果最小指數不是i(我們在步驟#3中設置的值),則相應地更改它。將最小值放在步驟#3的索引處,並將步驟#3的值放在發現最小索引的位置(觸發器)

步驟1和2確保檢查每個值。 步驟4 - 6找到最低限度,並把它放在正確的地方。在這些步驟的每次迭代中只移動一個值。

+0

非常感謝,我現在看到它。 – user3358116

+0

@ user3358116所以,請點擊箭頭來上傳我的答案,然後點擊V接受它:) – TheyCallMeSam