PAT1089【归并排序】
这题略。。。恶心。。
他说归并排序依次是相邻有序两块合并,而一向打惯了递归???
#include <bits/stdc++.h>
using namespace std;
typedef long long LL; const int N=1e2+10;
int b[N]; void Merge(int a[], int temp[], int Left, int Mid, int Right)
{
int i,tp=Left;
int dis=Right-Left+1;
int Leftend=Mid-1;
while(Left<=Leftend&&Mid<=Right)
if(a[Left]<a[Mid]) temp[tp++]=a[Left++];
else temp[tp++]=a[Mid++];
while(Left<=Leftend) temp[tp++]=a[Left++];
while(Mid<=Right) temp[tp++]=a[Mid++];
for(i=0;i<dis;i++,Right--)
a[Right]=temp[Right];
} bool Check(int a[],int n)
{
for(int i=0;i < n;i++)
if(a[i]!=b[i]) return false;
return true;
} bool InsertionSort(int a[],int n)
{
int temp,i,j;
for(i=1;i<=n-1;i++)
{
temp=a[i];
for(j=i-1;j>=0;j--)
{
if(a[j]<temp) break;
a[j+1]=a[j];
}
a[j+1]=temp;
if(Check(a,n))
{
i++;
temp=a[i];
for(j=i-1;j>=0;j--)
{
if(a[j]<temp) break;
a[j+1]=a[j];
}
a[j+1]=temp;
puts("Insertion Sort");
for(int k=0;k<n;k++)
{
if(k) printf(" ");
printf("%d",a[k]);
}
return true;
}
}
return false;
} bool MergeSort(int a[],int temp[],int n)
{
int dis=1,Left,Right,Mid;
while(1)
{
Left=0;
while(1)
{
Mid=Left+dis;
if(Mid>=n) break;
Right=Left+2*dis-1;
if(Right>=n)
{
Right=n-1;
Merge(a,temp,Left,Mid,Right);
break;
}
else
Merge(a,temp,Left,Mid,Right);
Left=Right+1;
if(Left>=n) break;
}
dis*=2;
if(Check(a,n))
{
Left=0;
while(1)
{
Mid=Left+dis;
if(Mid>=n) break;
Right=Left+2*dis-1;
if(Right>=n)
{
Right=n-1;
Merge(a,temp,Left,Mid,Right);
break;
}
else
Merge(a,temp,Left,Mid,Right);
Left=Right+1;
if(Left>=n) break;
} puts("Merge Sort");
for(int k=0;k<n;k++)
{
if(k) printf(" ");
printf("%d",a[k]);
}
puts("");
return true;
}
}
return false;
} int main()
{
int c[N],a[N],temp[N],n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
c[i]=a[i];
}
for(int i=0;i<n;i++) scanf("%d",&b[i]);
if(InsertionSort(c,n)) return 0;
if(MergeSort(a,temp,n)) return 0;
}
PAT1089【归并排序】的更多相关文章
- 算法与数据结构(十五) 归并排序(Swift 3.0版)
上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容.归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其拆分的足够小.当拆分的数组中只有一个元素 ...
- [算法]——归并排序(Merge Sort)
归并排序(Merge Sort)与快速排序思想类似:将待排序数据分成两部分,继续将两个子部分进行递归的归并排序:然后将已经有序的两个子部分进行合并,最终完成排序.其时间复杂度与快速排序均为O(nlog ...
- 归并排序的java实现
归并排序的优点不说了. 做归并排序之前,我先试着将两个有序数组进行排序,合并成一个有序数组. 思路:定义好两个有序数组,理解的时候我先思考了数组只有一个数组的排序,然后是两个元素的数组的排序,思路就有 ...
- JavaScript算法(归并排序与快速排序)
归并排序与快速排序这两个算法放在一起,也是因为时间复杂度都是对数级别的. 目前看过的资料,归并排序看<学习JavaScript数据结构与算法>介绍的归并排序吧,快速排序直接看百度百科,讲的 ...
- 归并排序算法 java 实现
归并排序算法 java 实现 可视化对比十多种排序算法(C#版) [直观学习排序算法] 视觉直观感受若干常用排序算法 算法概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Di ...
- java归并排序,单线程vs多线程
一.什么是归并排序 归并排序又称合并排序,它是成功应用分治技术的一个完美例子.对于一个需要排序的数组A[0..n-1],归并排序把它一分为二:A[0..n/2-1]和A[n/2..n-1],并对每个子 ...
- sphinx索引分析——文件格式和字典是double array trie 检索树,索引存储 – 多路归并排序,文档id压缩 – Variable Byte Coding
1 概述 这是基于开源的sphinx全文检索引擎的架构代码分析,本篇主要描述index索引服务的分析.当前分析的版本 sphinx-2.0.4 2 index 功能 3 文件表 4 索引文件结构 4. ...
- php基础排序算法 冒泡排序 选择排序 插入排序 归并排序 快速排序
<?php$arr=array(12,25,56,1,75,13,58,99,22);//冒泡排序function sortnum($arr){ $num=count($arr); ...
- [NOIP2013] 火柴排队(归并排序)
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...
随机推荐
- 三 Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性
Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性 Views(视图函数)逻辑处理,最终是围绕着两个对象实现的 http请求中产生两个核心对象: http请求:HttpRe ...
- hdu 1864 最大报销额(01背包)
最大报销额 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- Django 文件下载功能
def file_download(request): con= MySQLdb.connect(host='192.168.xxx.xxx',user='root',passwd='xxxx',db ...
- php如何判断电脑访问还是手机访问?
手机上网用户数量越来越大,如今各网站都推出了手机网站,电脑用户访问时直接访问电脑版网页,当用户通过手机访问网站时则跳自动跳转到手机版网页,下面给大家分享一段php中判断电脑访问还是手机访问的代码: & ...
- php 二维数组验证一个值是否存在
php 判断数字在二维数组里 $arr = array( array('a', 'b'), array('c', 'd') ); in_array('a', $arr); // 此时返回的永远都是 f ...
- Java中数学计算的相关方法
1:Math类 2.BigInteger类 3.BigDecimal类 BigInteger bi = new BigInteger("12433241123"); BigDec ...
- android开发之数据库存取图片
Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型).对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢 ...
- 简单的RBAC用户角色权限控制
Java web项目中,无论项目是大是小,或多或少都会涉及到用户访问权限的控制,权限管理总体的设计思路就是,不该看的不看,不该做的不做!据我目前的了解,我所知道的几种实现访问权限控制的方式有: JQu ...
- category extension
1 category 分类,只能添加方法,添加的方法成为原来类的一部分,达到扩展类的目的,可以被子类继承 主要给没有源代码的类 添加方法,团队合作项目互不影响,不该动原有类的基础上添加方法 self ...
- spring初始化顺序
首先,Spring bean的默认加载顺序是怎么控制的 工程中有2个bean,A和B,其中必须先初始化A再初始化B,但是没有depend-on或者Order等方式去保证,只不过恰好刚好这么运行着没出事 ...