2014-04-02 45 views
2

我想弄清楚如何使用插入排序來對整數的數組進行排序。我需要從原始數組中取值並將它們放入新數組中。我會告訴我有什麼代碼,但我已經撞了南牆和無法弄清楚如何排序方法works.`使用2個數組插入排序java

import java.util.Arrays; 
public static void main(String[] args) 
{ 
int[] orgArray = {5,4,1,6,3,144,2,14}; 
    int[] newArray = new int[orgArray.length]; 
    int currentNum=0; 
    for(int x=1; x<orgArray.length; x++) 
    { 
     if(x==1) 
      newArray[0]=orgArray[0]; 
     else 
      for(int y=x;y>0; y--) 
      { 
       currentNum = orgArray[x]; 
       if(newArray[y]<currentNum) 
       { 
        for(int z=orgArray.length-2;z>y;z--) 
         newArray[z]=newArray[z+1]; 
        newArray[x]=orgArray[x]; 
       } 

      } 
    } 
    System.out.println("Ascending order : " + Arrays.toString(newArray)); 
} 

輸出是:

Ascending order : [5, 0, 14, 14, 14, 14, 14, 14] 
+0

我在Python有一天這樣做,即使這是一個痛苦:/ – SS781

+0

你必須使用兩個數組? – Rainbolt

+0

顯然去年的班級很容易得到這個程序,但對我來說,這是一個爲期3天的計劃,直到@Elliot_Frisch幫助完成。 –

回答

5

當看着Insertion Sort,第一考慮算法 -

Insertion sort animation example

從動畫,你應該能夠告訴它在的地方。考慮到這一點,我想你想是這樣的 -

int[] orgArray = { 5, 4, 1, 6, 3, 144, 2, 14 }; 
int[] newArray = new int[orgArray.length]; 
// Copy the original array. 
System.arraycopy(orgArray, 0, newArray, 0, 
    orgArray.length); 
for (int x = 1; x < newArray.length; x++) { 
    int currentNum = newArray[x]; // <-- the current number changes on every loop 
    int y = x; 

    // The actual condition on which to shift up! 
    for (; y > 0 && newArray[y - 1] > currentNum; y--) { 
    newArray[y] = newArray[y - 1]; 
    } 
    // All shifts done, insert the correct place. 
    newArray[y] = currentNum; 
} 
System.out.println("Ascending order : " 
    + Arrays.toString(newArray)); 

,輸出,

Ascending order : [1, 2, 3, 4, 5, 6, 14, 144] 
+0

我會upvote您的評論,但我沒有足夠的聲譽。我不知道System.arraycopy();存在。謝謝你的幫助! –