首页 > 其他分享 >归并排序-逆序对的数量

归并排序-逆序对的数量

时间:2023-06-28 11:33:35浏览次数:28  
标签:mergeSort 归并 int mid ULL 排序 逆序

归并排序-逆序对的数量

原理

代码

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
typedef unsigned long long ULL;
int s[N], tmp[N];

ULL mergeSort(int l, int r){
    if(l >= r) return 0;
    
    int mid = (l + r) >> 1;
    ULL res = mergeSort(l, mid) + mergeSort(mid + 1, r);
    int i = l, j = mid + 1, k = 0;
    while(i <= mid && j <= r){
        if(s[i] <= s[j]) tmp[k++] = s[i++];
        else {
            res += mid - i + 1;
            tmp[k++] = s[j++];
        }
    }
    while(i <= mid) tmp[k++] = s[i++];
    while(j <= r) tmp[k++] = s[j++];
    for(k = 0; l <= r;) s[l++] = tmp[k++];
    return res;
}

int main(){
    int n;
    cin >> n;
    for(int i = 0; i < n; i++) cin >> s[i];
    cout << mergeSort(0, n - 1);
    return 0;
}

Q&A

以4 3 2 1为例,手动模拟即可明白这个代码

标签:mergeSort,归并,int,mid,ULL,排序,逆序
From: https://www.cnblogs.com/INnoVationv2/p/17510941.html

相关文章

  • 编程初学者入门7_公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分
    题目描述公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分制),去掉一个最高分和一个最低分,输出每组的平均成绩。输入描述:一行,输入7个整数(0~100),代表7个成绩,用空格分隔。输出描述:一行,输出去掉最高分和最低分的平均成绩,小数点后保留2位,每行输出后换行。示例1我的......
  • 归并和快速排序的递归实现
    最近学习了归并排序和快速排序,在这里写一篇博客用于复习并且检验自己是否有遗漏知识点的情况。归并排序归并排序的思想归并排序使用的思想为分治法。分治思想分为两部分第一部分为:分解,第二部分为合并。首先,将待排序的序列分成若干个子序列,每个子序列都是有序的。然后,再将这些有序的......
  • 30.快速排序
    算法思想时这样的:1.每次选取第一个数为基准数;2.然后使用“乾坤挪移大法”将大于和小于基准的元素分别放置于基准数两边;3.继续分别对基准数两侧未排序的数据使用分治法进行细分处理,直至整个序列有序。对于下面待排序的数组:第一步:先选择第一个数163为基准数,以163为基准将小......
  • Python 选择排序
    思路:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾重复第二步,直到所有元素均排序完毕 Code:1defselectSort(arr):2foriinrange(0,len(arr)):#i表示多少......
  • List排序
    List排序//按照某个字段进行正序排序list.sort((x,y)->Integer.compare(Integer.valueOf(x.getCourseDuration()),Integer.valueOf(y.getCourseDuration())));//按照某个字段进行倒序排序list.sort((x,y)->Integer.compare(Integer.valueOf(y.getCourseDuration()),Integer.......
  • 【算法】根据整数数组,生成正的素因子二位数组,并排序
    给定一个正整数或负整数的数组,I=[i1,..,in] 生成一个形式为的排序数组P [[p,I数组的所有ij的和,其中p是ij的素因子(p为正)]…]P将按素数的递增顺序进行排序。 示例:I={12,15};//结果=“(212)(327)(515)”[2,3,5]是I的元素的所有素因子的列表,因此是结果。 注意事项: 如果某些数字为......
  • 29.归并排序
    研究了这么多算法以后,小桂子颇有收获,基本自认为排序算法已经全部掌握,于是就想卖弄一下自己的“算法内功”,另一方面为了交流推广,把这些算法传播出去,就召开一个全国算法大赛,集思广益,征集更牛逼的算法!在算法大赛上,有两位白发葱葱的老者提出的算法让小桂子自惭形秽,感叹良多。。。其......
  • 34. 在排序数组中查找元素的第一个和最后一个位置
    给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1,-1]。你必须设计并实现时间复杂度为O(logn)的算法解决此问题。示例1:输入:nums=[5,7,7,8,8,10],target=......
  • 28.希尔排序
    插入排序虽好,但是某些特殊情况也有很多缺点,比如像下面这种情况:169前的元素基本不用插入操作就已经有序,元素1和2的排序几乎要移动数组前面的所有元素!!!于是,有个老帅哥就提出了优化此问题的希尔排序!希尔排序是希尔(DonaldShell)于1959年提出的一种排序算法。希尔排序也是......
  • LLM-Blender:大语言模型排序融合框架
    随着Alpaca,Vicuna,Baize,Koala等诸多大型语言模型的问世,研究人员发现虽然一些模型比如Vicuna的整体的平均表现最优,但是针对每个单独的输入,其最优模型的分布实际上是非常分散的,比如最好的Vicuna也只在20%的任务里比其他模型有优势。有没有可能通过集成学习来综合诸多开源的「......