玄关求解答
查看原帖
玄关求解答
1303781
wwy123楼主2024/11/28 13:20
#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

2024/11/28 13:20
加载中...