排序算法--归并排序

实现逻辑

① 将序列每相邻两个数字进行归并操作,形成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;
}

输出结果:

相关推荐
LyaJpunov9 天前
深入理解 C++ volatile 与 atomic:五大用法解析 + 六大高频考点
c++·面试·volatile·atomic
小灰灰搞电子9 天前
Qt PyQt与PySide技术-C++库的Python绑定
c++·qt·pyqt
时空自由民.9 天前
C++ 不同线程之间传值
开发语言·c++·算法
Ray_19979 天前
C++二级指针的用法指向指针的指针(多级间接寻址)
开发语言·jvm·c++
双叶8369 天前
(C语言)Map数组的实现(数据结构)(链表)(指针)
c语言·数据结构·c++·算法·链表·哈希算法
Jay_5159 天前
C++ STL 模板详解:由浅入深掌握标准模板库
c++·学习·stl
Cyrus_柯9 天前
C++(面向对象编程——继承)
开发语言·c++·算法·面向对象
Echo``9 天前
12.OpenCV—基础入门
开发语言·c++·人工智能·qt·opencv·计算机视觉
漠月瑾-西安9 天前
JavaScript中的10种排序算法:从入门到精通
javascript·算法·排序算法
十秒耿直拆包选手9 天前
C++:动态库相关文件
c++