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

归并排序

时间:2022-09-27 10:45:50浏览次数:44  
标签:归并 int al ++ ar n1 n2 排序

#include <iostream>
using namespace std;
void merge(int a[], int s1, int e1, int s2, int e2) {
	int n1 = e1 - s1 + 1;
	int n2 = e2 - s2 + 1;
	int al[n1];
	int ar[n2];
	for (int i = 0; i < n1; i++) al[i] = a[i + s1];
	for (int i = 0; i < n2; i++) ar[i] = a[i + s2];
	int l = 0; int r = 0; int p = s1;
	while (l < n1 && r < n2) {
		if (al[l] < ar[r]) {
			a[p] = al[l];
			l++;
			p++;
		}
		else {
			a[p] = ar[r];
			r++;
			p++;
		}
	}
	while (l < n1) {
		a[p] = al[l];
		l++;
		p++;
	}
	while (r < n2) {
		a[p] = ar[r];
		r++;
		p++;
	}
}
void mergesort(int a[], int s, int e) {
	if (s < e) {
		int m = (s + e) / 2;
		mergesort(a, s, m);
		mergesort(a, m + 1, e);
		merge(a, s, m, m + 1, e);
	}
}
int main() {
	int n;
	cin >> n;
	int a[n];
	for (int i = 0; i < n; i++) cin >> a[i];
	mergesort(a, 0, n - 1);
	for (int i = 0; i < n; i++) cout << a[i] << ' ';
	return 0;
}

  

标签:归并,int,al,++,ar,n1,n2,排序
From: https://www.cnblogs.com/lf-ancer/p/16733679.html

相关文章

  • 对一个列表内节点进行拖拽排序
    HTML5属性draggable可以让元素变成可拖动<lidraggable="true">1</li>该属性有三个值可选:true|false|autotrue:表示可拖动false:表示不可拖动auto:表......
  • 冒泡算法排序
    for(vari=0;i<arr.length;i++){    for(varj=0;j<arr.length-i;j++){        if(arr[j]>arr[j+1]){//            vartemp=arr[j]; ......
  • 数组的随机排序
    functionshuffle(arr){varlen=arr.length;for(vari=0;i<len-1;i++){varidx=Math.floor(Math.random()*(len-i));vartemp=arr[idx];arr[idx]=......
  • LeetCode[2418. 按身高排序]
    2418.按身高排序pair默认对first升序,当first相同时对second升序classSolution{public:vector<string>sortPeople(vector<string>&names,vector<int>&heig......
  • 字符串去重,并去除掉特殊字符按照数字在前字母在后的顺序排序字符串
    varstr="1233fddfd&3434fdsaff&454545&4545444rfdsfds&545gdsgs"; varn=""; vars="";for(vari=0;i<str.length;i++){    if((str[i]>=0&&str[i]<=9)&&n.inde......
  • 15 -- 排序算法之选择排序
    选择排序的思想:选择排序(selectsorting)也是一种简单的排序方法,它的基本思想是:第一次排序从arr[0]~arr[n-1]中选取最小值,与arr[0]交换,第二次排序从arr[1]~arr[n-1]中......
  • 【排序】217. 存在重复元素
    题目链接:https://leetcode.cn/problems/contains-duplicate/  分析:这题简单到不能再简单了。2个思路,1是先排序,排序之后如果有2个相邻元素相等,那就是True.那么时间......
  • 【排序】169. 多数元素
    题目链接:https://leetcode.cn/problems/majority-element/题目描述:  分析:这题,可以先排序,直接返回最中间的元素即可。但排序最快也是nlogn,显得自己比较lowB。所以就......
  • 【排序】88.合并两个有序数组
    题目链接:https://leetcode.cn/problems/merge-sorted-array/详情: 这题看起来像是数组题而不是排序题。分析:言归正传,这题说了是有序数组,要求在nums1上原地修改。......
  • 归并排序
    归并排序思想:将数组不断划分,只到不可再分为止(划分阶段仅划分,不做其他任何处理);再讲划分后的数组进行排序合并。代码实现:importjava.util.Arrays;publicclassMer......