我在不同的編譯器上編譯了這段代碼,但它們都給出了運行時錯誤。有人能告訴我這段代碼有什么問題嗎?
void merge(int *str, int beg, int mid, int end) {
int *arr = new int[end - beg 1];
int k = 0;
int i = beg;
int j = mid 1;
while (i <= mid && j <= end) {
if (str[i] < str[j]) {
arr[k] = str[i];
i ;
k ;
} else {
arr[k] = str[j];
j ;
k ;
}
}
while (i <= mid) {
arr[k] = str[i];
i ;
k ;
}
while (j <= end) {
arr[k] = str[j];
//here i got buffer overrun while writing to arr
j ;
k ;
}
for (i = beg; i <= end; i ) {
str[i] = arr[i - beg];
}
delete[] arr;
}
void merge_sort(int *str, int beg, int end) {
if (beg >= end)
return;
int mid = (end - beg) / 2;
merge_sort(str, beg, mid);
merge_sort(str, mid 1, end);
merge(str, beg, mid, end);
}
這段代碼與我在 Sanfoundry 上找到的代碼幾乎相同,但該代碼正在運行,但我的代碼出現了一些錯誤。
uj5u.com熱心網友回復:
您對 in 中點的計算merge_sort不正確:int mid = (end - beg) / 2;您應該寫:
int mid = beg (end - beg) / 2;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/496381.html
