参考代码

#include <bits/stdc++.h>

using namespace std;

int arr[10] = {0,6,6,7,4,5,8,9,2};
int brr[10]; //胡杨空壳

//并
void Merge(int left,int mid ,int right) {
	int i=left,j=mid+1,k=left;//k 是合并的开始位置

	while(i<=mid && j<=right) { //两边都有元素的时候
		//比较左右区间中,小的放到 胡杨空壳
		if(arr[i]<=arr[j]) brr[k++] = arr[i++];
		else brr[k++] = arr[j++];
	}
	//只剩左边?
	while(i<=mid) brr[k++] = arr[i++];
	
	//只剩右边?
	while(j<=right) brr[k++] = arr[j++];
	for(int i=left;i<=right;i++){
		arr[i] = brr[j];
	}
}

void Merge_sort(int left,int right) {
	//出口
	if(left==right) return;
	//计算中间下标
	int mid = (right - left)/2;
	//对左区间分割
	Merge_sort(left,mid);
	//对右区间分割
	Merge_sort(mid+1,right);
	Merge(left,mid,right);
}

int main() {
	//归并排序
	for(int i=1;i<=8;i++) cout << arr[i] << ' ';
	Merge_sort(1,8);
	cout << endl;
	for(int i=1;i<=8;i++) cout << arr[i] << ' ';
	return 0;
}

1 条评论

  • @ 2025-11-14 16:03:19

    #include <bits/stdc++.h>

    using namespace std;

    int arr[10] = {0,6,6,7,4,5,8,9,2}; int brr[10]; //胡杨空壳

    //并 void Merge(int left,int mid ,int right) { int i=left,j=mid+1,k=left;//k 是合并的开始位置

    while(i<=mid && j<=right) { //两边都有元素的时候
    	//比较左右区间中,小的放到 胡杨空壳
    	if(arr[i]<=arr[j]) brr[k++] = arr[i++];
    	else brr[k++] = arr[j++];
    }
    //只剩左边?
    while(i<=mid) brr[k++] = arr[i++];
    
    //只剩右边?
    while(j<=right) brr[k++] = arr[j++];
    for(int i=left;i<=right;i++){
    	arr[i] = brr[j];
    }
    

    } void Merge_sort(int left,int right) { //出口 if(left==right) return; //计算中间下标 int mid = (right - left)/2; //对左区间分割 Merge_sort(left,mid); //对右区间分割 Merge_sort(mid+1,right); Merge(left,mid,right); } int main() { //归并排序 for(int i=1;i<=8;i++) cout << arr[i] << ' '; Merge_sort(1,8); cout << endl; for(int i=1;i<=8;i++) cout << arr[i] << ' '; return 0; }

    • 1