排序算法--归并排序

实现逻辑

① 将序列每相邻两个数字进行归并操作,形成floor(n/2)个序列,排序后每个序列包含两个元素

② 将上述序列再次归并,形成floor(n/4)个序列,每个序列包含四个元素

③ 重复步骤②,直到所有元素排序完毕

cpp 复制代码
void print_array(int a[], int n){
	for (int i = 0; i < n; ++i){
		cout << a[i] << " ";
	}
	cout << endl;
}

/************************************************************************
* 功能描述:二路归并排序(两个有序序列)
* 参	数:有序序列下标 f 第一个, s 第二个
* 日	期:2023/11/22                                                   
************************************************************************/
void merge(int arr[], int fBegin, int fEnd, int sBegin, int sEnd, int newArray[])
{
	int index = fBegin;//新数组的下标
	int f = fBegin;//遍历第一个有序序列
	int s = sBegin;//遍历第二个有序序列

	while (f <= fEnd && s <= sEnd)
	{
		if (arr[f] <= arr[s])
		{
			newArray[index++] = arr[f++];
		}
		else
		{
			newArray[index++] = arr[s++];
		}
	}

	while (f <= fEnd)
	{
		newArray[index++] = arr[f++];
	}

	while (s <= sEnd)
	{
		newArray[index++] = arr[s++];
	}
	memcpy(arr + fBegin, newArray + fBegin, sizeof(int) *(sEnd - fBegin +1));
}

//多路归并排序
void mergeSort(int arr[], int left, int right, int newArray[])
{
	if (left >= right)
	{
		return;
	}
	int mid = (left + right) / 2;
	mergeSort(arr, left, mid, newArray);
	mergeSort(arr, mid + 1, right, newArray);
	merge(arr, left, mid, mid + 1, right, newArray);
}

int main(){
	int arr[] = {10, 8, 11, 7, 4, 12, 9, 6, 5, 3};
	int len = sizeof(arr)/sizeof(arr[0]);
	int newArray[10] = {0};
	
	cout << "排序前:";
	print_array(arr, len);

	mergeSort(arr, 0, len - 1, newArray);
	
	cout << "排序后:";
	print_array(arr, len);
	return 0;
}

输出结果:

相关推荐
weixin_499771559 分钟前
C++中的组合模式
开发语言·c++·算法
近津薪荼41 分钟前
dfs专题5——(二叉搜索树中第 K 小的元素)
c++·学习·算法·深度优先
xiaoye-duck42 分钟前
吃透 C++ STL list:从基础使用到特性对比,解锁链表容器高效用法
c++·算法·stl
_F_y1 小时前
C++重点知识总结
java·jvm·c++
皮皮哎哟1 小时前
数据结构:嵌入式常用排序与查找算法精讲
数据结构·算法·排序算法·二分查找·快速排序
堕2742 小时前
java数据结构当中的《排序》(一 )
java·数据结构·排序算法
初願致夕霞2 小时前
Linux_进程
linux·c++
Thera7772 小时前
【Linux C++】彻底解决僵尸进程:waitpid(WNOHANG) 与 SA_NOCLDWAIT
linux·服务器·c++
Wei&Yan3 小时前
数据结构——顺序表(静/动态代码实现)
数据结构·c++·算法·visual studio code
wregjru3 小时前
【QT】4.QWidget控件(2)
c++