加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

POJ2299归并排序

发布时间:2020-12-14 02:23:08 所属栏目:大数据 来源:网络整理
导读:C - Ultra-QuickSort(7.2.2)(7.2应用排序算法编程的实验范例) Crawling in process... Crawling failed Time Limit: 7000 MS???? Memory Limit: 65536 KB???? 64bit IO Format: %I64d %I64u Submit Status Description In this problem,you have to anal
C - Ultra-QuickSort(7.2.2)(7.2应用排序算法编程的实验范例)
Crawling in process... Crawling failed Time Limit:7000MS???? Memory Limit:65536KB???? 64bit IO Format:%I64d & %I64u
Submit Status

Description

In this problem,you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascending order. For the input sequence
9 1 0 5 4,

Ultra-QuickSort produces the output
0 1 4 5 9 .

Your task is to determine how many swap operations Ultra-QuickSort needs to perform in order to sort a given input sequence.

Input

The input contains several test cases. Every test case begins with a line that contains a single integer n < 500,000 -- the length of the input sequence. Each of the the following n lines contains a single integer 0 ≤ a[i] ≤ 999,999,the i-th input sequence element. Input is terminated by a sequence of length n = 0. This sequence must not be processed.

Output

For every input sequence,your program prints a single line containing an integer number op,the minimum number of swap operations necessary to sort the given input sequence.

Sample Input

5
9
1
0
5
4
3
1
2
3
0

Sample Output

6

0

#include <cstdio>
#include <cstring>
#include <iostream>
#define lolo long long
const lolo maxn=510000;
using namespace std;
lolo ans;
int a[maxn],t[maxn],n;
void _sort(int l,int r)//归并排序
{
    if(l==r)return;
    int mid=(l+r)/2;
    _sort(l,mid);
    _sort(mid+1,r);
    int i=l,j=mid+1,now=0;
    while(i<=mid&&j<=r)
    {
        if(a[i]>a[j])
        {
            ans+=mid-i+1;
            t[++now]=a[j++];
        }
        else
        {
            t[++now]=a[i++];
        }
    }
    while (i<=mid)t[++now]=a[i++];
    while (j<=r)t[++now]=a[j++];
    now=0;
    for(int k=l; k<=r; k++)a[k]=t[++now];
}
int main()
{
    scanf("%d",&n);
    while(n)
    {
        for(int i=1; i<=n; ++i)scanf("%d",&a[i]);
        ans=0;
        _sort(1,n);
        cout<<ans<<'12';
        scanf("%d",&n);
    }
    return 0;
}
学习总结:归并排序

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读