POJ_2299 Ultra-QuickSort【归并排序】
版权声明:本文为博主原创文章,未经博主同意不得转载。
https://blog.csdn.net/u013912596/article/details/35655703
题目链接:http://poj.org/problem?id=2299
题目大意:求出排序过程中的最小交换次数
利用归并排序的分治算法解决此题。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#define N 500001
using namespace std;
int a[N];
int temp[N];
long long ans;
void merge(int *a,int start,int mid,int end,int *temp)
{
    int ai=start;
    int bi=mid+1;
    int k=0;
    while (ai<=mid&&bi<=end)
    {
        if(a[ai]<=a[bi])
            temp[k++]=a[ai++];
        else
        {
            temp[k++]=a[bi++];
            ans+=(mid-ai+1);
        }
    }
    while (ai<=mid)
        temp[k++]=a[ai++];
    while (bi<=end)
        temp[k++]=a[bi++];
    for(int i=0;i<=end-start;i++)
    {
        a[start+i]=temp[i];
    }
}
void merge_array(int *a,int start,int end)
{
    if(start<end)
    {
        int mid=(start+end)/2;
        merge_array(a,start,mid);
        merge_array(a,mid+1,end);
        merge(a,start,mid,end,temp);
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    while(n)
    {
        memset(a,0,sizeof(a));
        ans=0;
        for(int i=0;i<n;i++)
            scanf("%d",&a[i]);
        merge_array(a,0,n-1);
        printf("%I64d\n",ans);
        scanf("%d",&n);
    }
    return 0;
}
POJ_2299 Ultra-QuickSort【归并排序】的更多相关文章
- 归并排序(MergeSort)和快速排序(QuickSort)的一些总结问题
		归并排序(MergeSort)和快速排序(QuickSort)都是用了分治算法思想. 所谓分治算法,顾名思义,就是分而治之,就是将原问题分割成同等结构的子问题,之后将子问题逐一解决后,原问题也就得到了 ... 
- Javascript算法系列之快速排序(Quicksort)
		原文出自: http://www.nczonline.net/blog/2012/11/27/computer-science-in-javascript-quicksort/ https://gis ... 
- ACM/ICPC 之 快排+归并排序-记录顺序对(TSH OJ-LightHouse(灯塔))
		TsingHua OJ 上不能使用<algorithm>头文件,因此需要手写快排(刚开始写的时候自己就出了很多问题....),另外本题需要在给横坐标排序后,需要记录纵坐标的顺序对的数量,因 ... 
- Ultra-QuickSort【归并排序典型题目】
		Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 34470 Accepted: 12382 ... 
- leetcode:Sort List(一个链表的归并排序)
		Sort a linked list in O(n log n) time using constant space complexity. 分析:题目要求时间复杂度为O(nlogn),所以不能用qu ... 
- MIT算法导论——第四讲.Quicksort
		本栏目(Algorithms)下MIT算法导论专题是个人对网易公开课MIT算法导论的学习心得与笔记.所有内容均来自MIT公开课Introduction to Algorithms中Charles E. ... 
- Javascript中的冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序  算法性能分析
		阿里面试中有一道题是这样的: 请用JavaScript语言实现 sort 排序函数,要求:sort([5, 100, 6, 3, -12]) // 返回 [-12, 3, 5, 6, 100],如果你 ... 
- 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)
		2013-08-22 14:55:33 八大排序方法汇总(选择排序-简单选择排序.堆排序,插入排序-简单插入排序.shell排序,交换排序-冒泡排序.快速排序,归并排序,计数排序). 插入排序还可以和 ... 
- 排序算法——QuickSort、MergeSort、HeapSort(C++实现)
		快速排序QuickSort template <class Item> void quickSort (Item a[], int l, int r) { if (r<=l) ret ... 
随机推荐
- python-day52--前端html、css
			一.html需掌握的: 1. img标签 属性:src alt title width height 2. a标签 属性:href target 3. ul 标签及li 标签,二者都是块级标签 ul ... 
- php date时间的获取
			1.得到当前时间:date('Y-m-d H:i:s',time()); 2.得到这个月有多少天:echo $getDay = date('t',date('Y-m-d', time())); 3.得 ... 
- Object是个什么鬼
			引言 老人常说,在js中,一切皆对象,那对象又是什么涅,最常用的我们都知道,对象有方法和属性.由一些键值对构成的集合,然后随便用个大括号括起来就形成了一个对象.看起来蛮简单的,但是真是这么简单么,当我 ... 
- JavaScript学习总结(六)——JavaScript判断数据类型总结
			最近做项目中遇到了一些关于javascript数据类型的判断处理,上网找了一下资料,并且亲自验证了各种数据类型的判断,在此做一个总结吧! 一.JS中的数据类型 1.数值型(Number):包括整数.浮 ... 
- 怎样设置IIS6.0的闲置超时时间
			打开IIS 信息服务管理器 1)打开IIS,点击应用程序池 2)找到Bs项目使用具体程序池(DspTest) 3)右键属性找到高级设置-- 进程模型 -- 闲置超时 4)设置闲置超时时间(默认为20分 ... 
- 015PHP文件处理——文件处理flock 文件锁定 pathinfo realpath tmpfile  tempname
			<?php /**文件处理flock 文件锁定 pathinfo realpath tmpfile tempname */ /*$arr=pathinfo('ab.txt');//获取文件路径的 ... 
- 跟我一起学习ASP.NET 4.5 MVC4.0(六)
			这一系列文章跨度有点大,由于最近忙于其他事情,没有更新,今天重新安装了下Win8系统,VS2012和SQLServer 2012,顺便抽空继续一篇.随着VS2012 RC版本的放出,ASP.NET M ... 
- Struts2的手工自定义验证--完整实例代码
			ActionSupport类实现了Validateable.ValidationAware接口, 其中Validateable接口就是验证器接口,该接口有一个validate()方法, validat ... 
- 读书笔记 C# 控制台应用程序之Main方法浅析
			Main方法是C#控制台应用程序和Windows窗体应用程序的入口点.Main方法可以有形参,也可以没有,可以有返回值(int整型),也可以没有.如下定义: 无返回值.无形参的格式: static v ... 
- Linux 查看服务器硬件信息
			目录 CPU CPU 总核数 = 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 查看路数/Socket(s) cat /proc ... 
