参考代码

#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;
}

0 条评论

目前还没有评论...