• 归并排序(合并排序)(逆序对)


    Description

    在这个问题中,你需要分析一个对n个不同数排序的算法。该算法主要通过交换相邻数直到序列有序(升序)。比如:对输入序列

                          9 1 0 5 4

    经过一系列交换后变成有序序列

                          0 1 4 5 9
    你的任务是计算将序列变成有序最少需要经过多少次交换。

    Input

    输入包含多组测试数据。每组第一个是整数n<500,000,表示输入序列的长度,接下来是n行,每行有一个整数a[i](0≤a[i]≤999,999,999)。当n=0时表示结束。

    Output

    对每一组输入,输出该序列变成有序所需要交换的最少的次数。

    Sample Input

    5
    9
    1
    0
    5
    4
    3
    1
    2
    3
    0
    

    Sample Output

    6
    0
    

    Hint

    选做


    合并排序


    Waterloo local 2005.02.05

     
     
     
    代码:
     
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    
    using namespace std;
    
    long long a[500001],b[500001];
    long long cnt;
    void merge_bing(long long frist,long long mid,long long last)
    {
        long long midd=mid+1;
        long long d=0;
        long long f=frist;
        while(frist<=mid&&midd<=last)
        {
            if (a[frist]<=a[midd])
                b[d++]=a[frist++];
            else
            {
                cnt+=mid-frist+1;
                b[d++]=a[midd++];
            }
        }
        while(frist<=mid)
            b[d++]=a[frist++];
        while(midd<=last)
            b[d++]=a[midd++];
        for(long long i=0;i<d;i++)
            a[f++]=b[i];
    }
    void mergesort(long long frist,long long last)
    {
        long long mid=0;
        if (frist<last)
        {
            mid=(frist+last)/2;
            mergesort(frist,mid);
            mergesort(mid+1,last);
            merge_bing(frist,mid,last);
        }
    }
    
    int main()
    {
        int n;
        while(scanf("%d",&n)&&n)
        {
            int i,j;
            for(i=0;i<n;i++)
                scanf("%lld",&a[i]);
            cnt=0;
            mergesort(0,n-1);
            printf("%lld
    ",cnt);
        }
        return 0;
    }
    

      

    屌丝终有逆袭日,*******。
  • 相关阅读:
    机器学习之逻辑回归
    机器学习之线性回归与模型保存
    机器学习之决策树
    机器学习之贝叶斯算法
    机器学习之KNN算法
    算法基础与开发流程
    特征选择与特征降维
    特征预处理
    RSA加密算法和签名算法
    Java中使用OpenSSL生成的RSA公私钥
  • 原文地址:https://www.cnblogs.com/ZhaoPengkinghold/p/3737694.html
Copyright © 2020-2023  润新知