2011-12-20 110 views
2

數組如果我有一個數組:重新排列在Java中

int[] myArray = new int[10] 
for (int i = 0; i < myArray.length; i++) { 
    myArray[i] = i; 
} 

//resulting array: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 

我如何才能將一切behing 4了一個空間,併發送4到後面?例如:

這樣的:

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 

到這一點:

{0, 1, 2, 3, 5, 6, 7, 8, 9, 4} 
+0

這是quicksort? – Gevorg 2011-12-20 05:57:09

回答

3

如何:

int[] myArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 
System.arraycopy(myArray, 5, myArray, 4, 5); 
myArray[myArray.length-1] = 4; 

在上面的代碼,我使用的arraycopy方法複製範圍的5數字從索引5開始,到數組中的索引4,然後在最後一個位置簡單地設置一個4。

請注意,使用arraycopy比在循環中複製值快得多,因爲它通常作爲複製內存位置的本機操作來實現。

編輯:

的更通用的解決方案,用於發送到後面的給定位置陣列中的方法:

public static void sendBack(int[] array, int idx) { 
    int value = array[idx]; 
    System.arraycopy(array, idx+1, array, idx, array.length-idx-1); 
    array[array.length-1] = value; 
} 

對於示例,調用它是這樣的:

sendBack(myArray, 4); 
// now myArray is {0, 1, 2, 3, 5, 6, 7, 8, 9, 4} 
2

是否這樣?

int start = 4; 
int temp = myArray[start]; 
for(int i = start; i < myArray.length - 1; i++) { 
    myArray[i] = myArray[i+1]; 
} 
myArray[myArray.length-1] = temp; 

這是我能想以最快的方式...