2013-05-16 50 views
0

這是我的第一個插入數組,但它不可能排序,我不確定哪裏出錯了。有任何想法嗎?如何糾正插入排序?

for (int i=1; i<array.length; i++) { 
      int temp = array[i]; 
      for (int j=i-1; j >=0 && temp < array[j]; j--) { 
       array[j+1] = array[j]; 
       array[j+1] = temp; 
      } 
      ItsATextArea.append(array[i] + "\n"); 
     } 

回答

0
array[j+1] = array[j]; 
array[j+1] = temp; 

看起來越野車給我。你確定要在數組中使用相同的元素兩次嗎?

1

我想你會犯錯這裏

array[j+1] = array[j]; 
array[j+1] = temp; // It must be array[j] = temp 
+0

你確定嗎?我在答案中看到沒有任何區別,沒有人被排序。 – user2383438

1

你幾乎擁有它的權利。 'array [j + 1] = temp;'行應該在循環之外。

 for (int i=1; i<array.length; i++) { 
      int temp = array[i]; 
      int j = i - 1; 
      for (; j >=0 && temp < array[j]; j--) { 
       array[j+1] = array[j]; 
      }     
      array[j+1] = temp; 
     } 

另外,如果您打算打印排序後的數組,請在算法結束後進行。因爲您無法真正知道插入的元素「temp」是否在您添加「append」-line的位置上處於正確的位置。例如,如果原始數組中的最後一個元素是最小的元素,則所有元素都需要向右移動一個位置。