[英]Sorting An Array of Generic Type
我正在嘗試對遺傳類型數組實施合並排序算法。 問題是由於某些元素設置為0,結果是不正確的。我懷疑問題是由於我在整個程序中進行的強制轉換引起的,但我不知道確切的原因。
如您在sortUsingMerge()中所見,我將Object的數組轉換為泛型。 同樣在下面的IF語句中,我將數組中的Object元素強制轉換為int以便能夠比較2個元素。 我的意圖是排序算法應該適用於任何類型的任何數組,但是我現在暫時不想為每種類型編寫比較器。
Input array: 5 1 -2 3 7 8 0
Output: -2 0 1 1 3 7 0
看起來數字5和8在排序過程中以某種方式轉換為不同的數字。 有人可以告訴我為什么嗎? 謝謝!
Source code:
public void sortUsingMerge(){
Object[] array = (E[]) new Object[size];
Object[] helper = (E[]) new Object[size];
mergeSort(array,helper,0,size-1);
}
public void mergeSort(Object[] array, Object[] helper, int low, int high){
if (low<high){
int mid = (low + high)/2;
mergeSort(array,helper,low,mid); //sort left half
mergeSort(array,helper,mid+1,high);//sort right half
merge(array,helper,low,mid,high);
}
}
public void merge(Object[] array, Object[] helper, int low, int mid, int high){
for (int i=low; i<=high; i++){// copy both parts into helper array
helper[i] = array[i];
}
int helperLeft = low;
int helperRight = mid + 1;
int current = low;
while (helperLeft <= mid && helperRight <=high){
if ((int)helper[helperLeft] <= (int)helper[helperRight]){
array[current] = helper[helperLeft];
helperLeft++;
}
else{
array[current] = helper[helperRight];
helperRight++;
}
current++;
}
int remain = mid - helperLeft;
for (int i=0; i<remain; i++){
array[current+i] = helper[helperLeft + i];
}
}
內部合並替換
for (int i=0; i<remain; i++){
array[current+i] = helper[helperLeft + i];
}
同
while (helperLeft <= mid) {
array[current] = helper[helperLeft];
current++;
helperLeft++;
}
強制轉換永遠不會給您這種錯誤。 合並結束時出現錯誤。
int remain = mid - helperLeft;
for (int i=0; i <= remain; i++) { //changed < to <=
array[current+i] = helper[helperLeft + i];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.