#include <iostream>
typedef long long ElemType;
bool cmp(ElemType &a, ElemType &b){
return a < b;
}
void merge(ElemType *res, int rst, ElemType *a, int ast, int aend, int bst, int bend, bool (*cmp)(ElemType &a, ElemType &b)){
int i = ast, j = bst, k = rst;
while (i <= aend && j <= bend){
if(cmp(a[i], a[j])){
res[k++] = a[i++];
}
else{
res[k++] = a[j++];
}
}
while (i <= aend){
res[k++] = a[i++];
};
while (j <= bend) {
res[k++] = a[j++];
}
}
void merge_sort(ElemType *a, int st, int end, bool (*cmp)(ElemType &a, ElemType &b)){
if(end <= st) return;
int mid = (st + end) >> 1;
merge_sort(a, st, mid, cmp), merge_sort(a, mid+1, end, cmp);
ElemType *res = new ElemType[100010];
merge(res, st, a, st, mid, mid+1, end, cmp);
for (int i = st;i <= end;++i) a[i] = res[i];
delete[] res;
}
int main(){
ElemType data[100010];
int M;
std::cin >> M;
for (int i = 1;i <= M;++i) std::cin >> data[i];
merge_sort(data, 1, M, &cmp);
for (int i = 1;i <= M;++i) std::cout << data[i] << ' ';
}
想问个问题我在merge里面吧 ElemType *res = new ElemType[100010]; 换成 ElemType *res = new ElemType[end - st + 1]; 就会RE这是为什么 这是通过链接换成100010后https://www.luogu.com.cn/record/191591675