首页 > 其他分享 >二路归并排序

二路归并排序

时间:2024-07-20 09:57:56浏览次数:15  
标签:归并 int 二路 mid high ++ low n1 排序

#include<iostream>
using namespace std;
void merge(int a[], int low, int mid, int high)
{
	int n1 = mid-low + 1;
	int n2 = high - mid;
	int* L = (int*)malloc(sizeof(int)*n1);
	int* R = (int*)malloc(sizeof(int)*n2);
	int i, j, k;
	for (i = 0, k = low; i < n1; i++, k++)
		L[i] = a[k];
	for (j = 0, k = mid + 1; j < n2; j++, k++)
		R[j] = a[k];//数组复制完成
	for (i = 0, j = 0, k = low; i < n1 && j < n2; k++)
	{
		if (L[i] < R[j])
		{
			a[k] = L[i];
			i++;
		}
		else
		{
			a[k] = R[j];
			j++;
		}
	}
	while (i < n1)
	{
		a[k] = L[i];
		i++, k++;
	}
	while (j < n2)
	{
		a[k] = R[j];
		j++, k++;
	}
}
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);
	}
}
int main()
{
	int arr[8] = { 10,8,5,0,45,12,74,56 };
	cout << "归并排序之后的:" << endl;
	mergesort(arr, 0, 7);
	for (int i = 0; i < 8; i++)
	{
		cout << arr[i]<<" ";
	}
	return 0;
}

标签:归并,int,二路,mid,high,++,low,n1,排序
From: https://blog.csdn.net/weixin_73598089/article/details/140462360

相关文章

  • 插入排序 insertsort
    #include<iostream>usingnamespacestd;voidinsertsort(inta[],intn){ inti,j,key; for(i=1;i<n;i++) { if(a[i]<a[i-1]) { key=a[i]; for(j=i-1;j>=0&&a[j]>key;j--) a[j+1]=a[j]; a[j......
  • 数据结构_排序
    目录一、排序二、插入排序2.1直接插入排序2.2希尔排序三、选择排序3.1直接选择排序3.2堆排序四、交换排序4.1冒泡排序4.2快速排序五、归并排序六、排序算法分析总结一、排序排序:就是使一串记录序列,按照其中某个或某些关键字的大小,进行递增或递减的排列......
  • 堆排序的实现
    首先需要知道的是,如果想要对一个数组排升序,要建大堆,排降序,要建小堆。具体过程:(以排降序为例)1)建小堆;2)交换堆顶(第一个)和堆尾(最后一个)的数据;3)交换完后,最后一个数据不动,剩下的数据对堆顶元素进行向下调整;4)循环2)3)步骤。下面用图来展示一下过程:1)假设对数组arr[10]={3,1......
  • 合并排序数组
    合并排序数组(蓝桥杯题库)题目描述给定排序数组A和B,实现一个算法将B按排序顺序合并到A中。介绍如下:数组A和B的均为排序数组,数字按从小到大排列。数组A的的长度为 ......
  • EXCEL:按有序列表对数组进行排序,无需自定义列表
    我有一张邮政编码表,其中包含发送到每个邮政编码的货件数量。我想按特定顺序按邮政编码对这个数组进行排序,我将其放在第二个列表中。我不想按客户数量或邮政编码的数字顺序排序,而是按这个专门排名的列表排序。我无法使用自定义排序功能,因为我的列表对于此功能来说太长了。......
  • 排序代码示例
    快速排序publicstaticvoidmain(String[]args){int[]arr={0,5,9,1,3,6};//intpartition=partition(arr,0,arr.length-1);quick(arr,0,arr.length-1);System.out.println(Arrays.toString(arr));}publicsta......
  • 【C语言】深入解析归并排序
    文章目录什么是归并排序?归并排序的基本实现代码解释归并排序的优化归并排序的性能分析归并排序的实际应用结论在C语言编程中,归并排序是一种高效且稳定的排序算法。它采用分治法将问题分解成更小的子问题进行解决,然后合并结果。本文将详细介绍归并排序算法,包括其......
  • 从零开始学Java(超详细韩顺平老师笔记梳理)05——数组(语法,赋值机制,拷贝反转)、排序(冒泡排
    文章目录前言一、数组1.基础语法1)介绍2)使用(动态、静态初始化语法与使用)3)注意事项和细节2.数组赋值机制(ArryAssign)3.数组拷贝4.数组反转(reserve)5.数组的扩容与缩减二、排序三、查找四、二维数组(TwoDimensionalArry)1.快速入门2.使用3.案例:打印一个10行的......
  • 拓扑排序 + 习题
    P4017最大食物链计数 题目链接:https://www.luogu.com.cn/problem/P4017题意:给你一个食物网,求出这个最大食物链的数量最大食物链定义为左端不会捕食其他捕食者,最右端不会被捕食.解释看例子第1行nm表示生物种类n和吃和被吃的关系m接下来m行AB表示A被B吃.........
  • 将一组混乱的线形状的点排序为顺序排列的线|turf|js
    思路是1/找到一组点中距离最远的两个点,将其中一个作为线的起点2/为起点找到距离其最近的点,作为线段的第二个点;3/以第二个点为基准,找距离其最近的点作为第三个点,4/以此类推,将一组点调整为一条没有重复方向的线参数为一个二维数组,进入函数为sortLine//传入一对数组,传出一个......