归并排序 poj2299

编程入门 行业动态 更新时间:2024-10-07 12:20:00

归并排序 poj2299

归并排序 poj2299

这是题目

把数组分成若干个子序列,再合并

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<algorithm>
#include<vector>
using namespace std;
typedef  long long ll;
#define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);const int MAXN=500005;
const int MOD=10000000;
const int INF=0x7fffffff;
int n;
int a[MAXN]; int left_t[MAXN],right_t[MAXN];
ll ans = 0;void merge(int a[],int p,int mid,int r){//合并int n1 = mid - p + 1;int n2 = r - mid ,i,j;for(int i=1;i<=n1;i++) left_t[i] = a[p+i-1];for(int i=1;i<=n2;i++) right_t[i] = a[mid+i];left_t[n1+1] = INF;right_t[n2+1] = INF;i=1,j=1;for(int k=p;k<=r;k++){if(left_t[i] <= right_t[j]){a[k] = left_t[i];i++;}else {a[k] = right_t[j];j++;//ans+=n1-i+1;}}
}			  
void MergeSort(int a[],int first,int last){//分组int mid = 0;if(first < last){mid = (first + last) / 2;MergeSort(a,first,mid);MergeSort(a,mid+1,last);merge(a,first,mid,last);}
}int main(){ // 归并排序 SIS;while(cin>>n && n!=0){//ans = 0;for(int i=0;i<n;i++)cin>>a[i];MergeSort(a,0,n-1);cout<< ans <<endl;}return 0;
}

更多推荐

归并排序 poj2299

本文发布于:2024-02-19 18:34:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1765744.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!