我的輸入:
7
0 1 4 5 3 2 6
經過嘗試,發現除錯的時候我不在查看串列添加任何查看變數,輸出結果正確:0 1 2 3 4 5 6
添加了查看變數,輸出的結果像是隨機的,每次重新打開檔案除錯輸出結果都不一樣
而且我想查看陣列變數元素,添加了查看變數:*(&a[0])@10和*(&t[0])@10
后來發現除錯的時候什么查看變數都不添加,除錯輸出結果才正確
好郁悶啊,這是為什么?
#include <cstdio>
#include <cstring>
#include <string>
int t[100005];
int a[100005];
int n;
void mergeSort(int l, int r) { //* 把[l,r]排序
if(l == r) return;
int mid = (l+r)/2;
mergeSort(l, mid); // 排序 a[l, mid]
mergeSort(mid+1, r); // 排序 a[mid+1, r]
int p=l, q=mid+1, i=l; // 合并到 t[l,r]
while(p<=mid && q<=r) { // 兩個隊伍都可以取
if(a[p] < a[q])
t[i++] = a[p++];
else
t[i++] = a[q++];
}
while(p <= mid) t[i++] = a[p++];// 左邊隊伍沒有取完
while(q <= r) t[i++] = a[q++]; // 右邊隊伍沒有取完
for(int i=l; i<=r; i++) a[i] = t[i];
}
void inp() {
scanf("%d", &n);
for(int i=1; i<=n; i++) scanf("%d", &a[i]);
}
int main(void) {
inp();
mergeSort(1, n);
for(int i=1; i<=n; i++) printf("%d ",a[i]);
puts("");
return 0;
}
uj5u.com熱心網友回復:
而且我把21行的for想改成memcpy(a, t, sizeof(a))運行輸出也是錯誤的
真的很疑惑QAQ求大佬解惑
uj5u.com熱心網友回復:

q = 3
mid + 1 = 2
除錯的時候就是這里有問題,我明明令 q = mid + 1了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/200441.html
標籤:C++ 語言
