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 ...
随机推荐
- zzuli 1875多线DP
1875: 蛤玮的财宝 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 530 Solved: 116 SubmitStatusWeb Board De ...
- 蓝桥杯--乘积最大(数字DP)
1230: 乘积最大 [DP] 时间限制: 1 Sec 内存限制: 128 MB 提交: 7 解决: 5 状态 题目描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚 ...
- POJ-1160 Post Office (DP+四边形不等式优化)
题目大意:有v个村庄成直线排列,要建设p个邮局,为了使每一个村庄到离它最近的邮局的距离之和最小,应该怎样分配邮局的建设,输出最小距离和. 题目分析:定义状态dp(i,j)表示建设 i 个邮局最远覆盖到 ...
- UVA-11149 Power of Matrix(矩阵二分幂)
题目大意:给一个n阶方阵,求A1+A2+A3+......Ak. 题目分析:令F(k)=A1+A2+A3+......Ak.当k为偶数时,F(k)=F(k/2)*(E+Ak/2),k为奇数时,F(k) ...
- C#图片转换成二进制流并且保存到sql server数据库
注意:我要存储文件二进制流的列的类型是text,不是image类型. 我已经实现了从数据库中读取text类型的二进制流,,现在就是不知道怎么存进去. 我的部分关键代码: StreamReader sr ...
- mahout推荐系统
本章包含以下内容: 首先看一下实战中的推荐系统 推荐引擎的精度评价 评价一个引擎的准确率和召回率 在真实数据集:GroupLens 上评价推荐系统 我们每天都会对喜欢的.不喜欢的.甚至不关心的事情有很 ...
- sqlite 查询数据库中所有的表名,判断某表是否存在,将某列所有数值去重后获得数量
1.列出当前db文件中所有的表的表名 SQL语句:SELECT * FROM sqlite_master WHERE type='table'; 结构如下: 注:网上有人说可以带上db文件的名称,如: ...
- linux command wc
Linux command wc [Purpose] Learning how to statistics line numbers in file [Eevironment] ...
- linux pipes
In Linux, a pipe is implemented using two filedata structures which both point at the same temporary ...
- Filesystem has been set read-only problem.
case: when system is running well ,sudden tf became read-only; analyze: read the kernel log using dm ...