版权声明:本文为博主原创文章,未经博主同意不得转载。

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【归并排序】的更多相关文章

  1. 归并排序(MergeSort)和快速排序(QuickSort)的一些总结问题

    归并排序(MergeSort)和快速排序(QuickSort)都是用了分治算法思想. 所谓分治算法,顾名思义,就是分而治之,就是将原问题分割成同等结构的子问题,之后将子问题逐一解决后,原问题也就得到了 ...

  2. Javascript算法系列之快速排序(Quicksort)

    原文出自: http://www.nczonline.net/blog/2012/11/27/computer-science-in-javascript-quicksort/ https://gis ...

  3. ACM/ICPC 之 快排+归并排序-记录顺序对(TSH OJ-LightHouse(灯塔))

    TsingHua OJ 上不能使用<algorithm>头文件,因此需要手写快排(刚开始写的时候自己就出了很多问题....),另外本题需要在给横坐标排序后,需要记录纵坐标的顺序对的数量,因 ...

  4. Ultra-QuickSort【归并排序典型题目】

    Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 34470   Accepted: 12382 ...

  5. leetcode:Sort List(一个链表的归并排序)

    Sort a linked list in O(n log n) time using constant space complexity. 分析:题目要求时间复杂度为O(nlogn),所以不能用qu ...

  6. MIT算法导论——第四讲.Quicksort

    本栏目(Algorithms)下MIT算法导论专题是个人对网易公开课MIT算法导论的学习心得与笔记.所有内容均来自MIT公开课Introduction to Algorithms中Charles E. ...

  7. Javascript中的冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序 算法性能分析

    阿里面试中有一道题是这样的: 请用JavaScript语言实现 sort 排序函数,要求:sort([5, 100, 6, 3, -12]) // 返回 [-12, 3, 5, 6, 100],如果你 ...

  8. 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)

    2013-08-22 14:55:33 八大排序方法汇总(选择排序-简单选择排序.堆排序,插入排序-简单插入排序.shell排序,交换排序-冒泡排序.快速排序,归并排序,计数排序). 插入排序还可以和 ...

  9. 排序算法——QuickSort、MergeSort、HeapSort(C++实现)

    快速排序QuickSort template <class Item> void quickSort (Item a[], int l, int r) { if (r<=l) ret ...

随机推荐

  1. spoj Fast Multiplication

    题意:乘法 要用nlogn的fft乘法. //#pragma comment(linker,"/STACK:1024000000,1024000000") #include< ...

  2. android------adb命令 pull或push手机和电脑文件交互

    先说一下adb命令配置,如果遇到adb不是内部或外部命令,也不是可运行的程序或批量文件.配置下环境变量 1.adb不是内部或外部命令,也不是可运行的程序或批量文件. 解决办法:在我的电脑-属性-高级计 ...

  3. Big Problems for Organizers CodeForces - 418D (贪心,直径)

    大意: 给定n结点树, m个询问, 每次给出两个旅馆的位置, 求树上所有结点到最近旅馆距离的最大值 先考虑一些简单情形. 若旅馆只有一个的话, 显然到旅馆最远的点是直径端点之一 若树为链的话, 显然是 ...

  4. .net图表工具汇总

    概述:图形图表的可视化数据表现形式已成为一种趋势,本文推荐了10款非常好用的.NET图表控件,希望对广大.NET图表开发者能有所帮助. 读图时代,图形图表的可视化数据表现形式已成为一种趋势.因为图表能 ...

  5. 白化whitening

    原文地址:http://blog.csdn.net/hjimce/article/details/50864602 作者:hjimce 一.相关理论     白化这个词,可能在深度学习领域比较常遇到, ...

  6. duilib CEditUI 禁止输入中文字符,禁止复制粘贴

    1.CEditUI 禁止使用中文输入法 在 CEditUI::DoEvent 函数中,添加代码: if(m_bOnlyEnglishChar && m_pWindow &&am ...

  7. POJ 3176 Cow Bowling(dp)

    POJ 3176 Cow Bowling 题目简化即为从一个三角形数列的顶端沿对角线走到底端,所取得的和最大值 7 * 3 8 * 8 1 0 * 2 7 4 4 * 4 5 2 6 5 该走法即为最 ...

  8. 51nod1513

    题解: 更据题意,在树上深度为没一个数的都放在一起,要用的时候二分出来,看结果 用c++的数据结构 代码: #include<bits/stdc++.h> using namespace ...

  9. Schema——demo

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  10. Spring学习笔记之The IoC container

    IoC is also known as dependency injection (DI). 这是一个过程?什么样的过程呢?对象自己定义它的依赖关系,这意味着,那些他们依赖的对象,只能通过构造函数参 ...