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

归并排序

时间:2024-11-17 09:18:43浏览次数:1  
标签:sort 归并 int mid merge 排序

先递归为多个小部分再进行排序

#include <iostream>

using namespace std;
const int N = 1e5 + 10;
int a[N], tem[N];

void merge_sort(int a[], int l, int r)
{
	if (l >= r) return;
	
	int mid = l + r >> 1;
	merge_sort(a, l, mid), merge_sort(a, mid + 1, r); //递归分为两部分
	
	int i = l, j = mid + 1, k = 0;
	while (i <= mid && j <= r) //取两部分中最小的值放入另一个数列
		if (a[i] <= a[j]) tem[k ++] = a[i ++];
	else tem[k ++] = a[j ++];
	while (i <= mid) tem[k ++] = a[i ++];  
	while (j <= r) tem[k ++] = a[j ++];
	
	for (i = l, j = 0;i <= r;i ++, j ++) a[i] = tem[j]; 
}


int main()
{
	int n;
	scanf("%d", &n);
	for (int i = 0;i < n;i ++) scanf("%d", &a[i]);
	
	merge_sort(a, 0, n - 1);
	
	for (int i = 0;i < n;i ++) printf("%d ", a[i]);
	
	return 0;
}

标签:sort,归并,int,mid,merge,排序
From: https://www.cnblogs.com/acing/p/18550255

相关文章

  • 简单选择排序
     假设要排序的序列元素个数为n,简单选择排序的思路为:第一趟从第一个元素开始,在未排序的n个元素中选出最小元素,将其与序列第一个元素交换;第二趟从第二个元素开始,在未排序的n-1个元素中,选出最小元素,将其与本趟的第一个元素交换,以此类推,经过n-1趟,形成了从小到大的已排序序列。 ......
  • python文件排序都有哪些方法
    在python环境中提供两种排序方案:用库函数sorted()对字符串排序,它的对象是字符;用函数sort()对数字排序,它的对象是数字,如果读取文件的话,需要进行处理(把文件后缀名‘屏蔽’)。(1)首先:我测试的文件夹是/img/,里面的文件都是图片,如下图所示:(2)测试库函数sorted(),直接贴出代码:impor......
  • c语言快速排序
    快速排序(Quicksort)是一种高效的排序算法,采用分治法(DivideandConquer)策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。快速排序的步骤:选择基准(Pivot):从数列中挑出一个元素,称为"基准"(pivot)。分区(Partitioning):重新排序数列,所有元素比基准值小的摆放......
  • 数据结构(初阶5)---堆与堆排序(详解)
    堆与堆排序一.二叉树初探1).基本概念2).满二叉树和完全二叉树3.)二叉树的存储方式二.堆与堆排序1.堆(完全二叉树的特例)1).建堆(向下调整法)2).堆排序再将堆排序之前,我们先引入二叉树概念一.二叉树初探1).基本概念二叉树是一种数据结构,二叉树形如:1.其中A节......
  • 【水光互补优化调度】基于非支配排序遗传算法的多目标水光互补优化调度(Matlab代码实现
     ......
  • 【水光互补优化调度】基于非支配排序遗传算法的多目标水光互补优化调度(Matlab代码实现
     ......
  • 深入浅出:Java 中的经典排序算法详解与实现
    文章目录1.冒泡排序(BubbleSort)基本思路详细步骤Java实现2.插入排序(InsertionSort)基本思路详细步骤Java实现3.选择排序(SelectionSort)基本思路详细步骤Java实现4.快速排序(QuickSort)基本思路详细步骤Java实现5.归并排序(MergeSort)基本思路......
  • 算法 -交换排序
    博客主页:【夜泉_ly】本文专栏:【算法】欢迎点赞......
  • SS241115C. 排序(sort)
    SS241115C.排序(sort)题意给你一个长度为\(n\)的序列\(a\),每次操作对\([1,\frac{n}{2}],[\frac{n}{2}+1,n]\)进行归并排序。有\(q\)次询问,给出\(t,x\),问进行\(t\)次操作后\(a_x\)的值。思路考虑一次操作发生了什么。假设\(x<y\),那么\(x\)和它后面的一坨都会排......
  • 并行排序算法:双调排序
    引入有一个排列,你可以通过“比较并交换”这个操作将该排列排好序,即,每次选择一对数\((i,j)\),若\(a_i>a_j\)则交换,否则不交换。但是,你可以把多对\((i,j)\)放在一次操作里并行“比较并交换”,此时操作数记1,与数对的对数无关,但是每个\(i\)只能出现至多一次。要求操作数最小。......