C++归并排序

这篇博客详细介绍了归并排序的原理及其实现过程。通过C++代码展示了如何将有序表进行合并,并提供了完整的归并排序函数`mergeSort`。博客还包含了一个实例,对一个整数数组进行排序,并打印排序前后的结果,以验证算法的正确性。
摘要由CSDN通过智能技术生成
#include<iostream>
using namespace std;


//将有序表 a[low.. mid]和a[mid+1. .high]归并为有序表 b[low.. high]
void merge(int a[], int low, int mid, int high) {

	//b数组暂存合并的有序序列
	int *b = new int[high - low + 1];

	int i = low, j = mid + 1, k = 0;
	//将a中记录较小值复制到b中
	while (i <= mid && j <= high) {
		//两个元素相等时,优先使⽤靠前的那个(稳定性)
		if (a[i] <= a[j]) {

			b[k++] = a[i++];
		} else {
			b[k++] = a[j++];
		}
	}

	//没有归并完的部分复制到尾部
	while (i <= mid) {
		b[k++] = a[i++];
	}
	while (j <= high) {
		b[k++] = a[j++];
	}
	//将排好序的存回a中low到high这区间
	for (i = low, k = 0; i <= high; i++, k++) {
		a[i] = b[k];
	}
	delete []b;//释放内存,由于指向的是数组,必须用delete []
}

//归并排序
void mergeSort(int a[], int low, int high) {
	if (low < high) {
		int mid = (low + high) / 2;//从中间划分
		mergeSort(a, low, mid); //对左半部分归并排序
		mergeSort(a,  mid + 1, high); //对右半部分归并排序
		merge(a, low, mid, high); //归并
	}
}


void printArr(int a[], int len) {

	for (int i = 0; i < len; i++) {
		printf("%d  ", a[i]);
	}
	printf("\n");
}


int main() {

	int arr[7] = {23, 54, 12, 4, 5, 6, 32};
	int len = sizeof(arr) / sizeof(int);

	printArr(arr, len);
	mergeSort(arr, 0, len - 1);
	printArr(arr, len);



}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ROJS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值