1089. Insert or Merge (25)-判断插入排序还是归并排序
2024-10-15 05:48:47
判断插入排序很好判断,不是的话那就是归并排序了。
由于归并排序区间是2、4、8开始递增的,所以要判断给出的归并排序执行到哪一步,就要k从2开始枚举。
然后再对每个子区间进行一下sort即可。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <cmath>
using namespace std;
const int maxn=;
int num1[maxn],num2[maxn]; int main()
{
int n;
scanf("%d",&n);
for(int i=;i<n;i++)
scanf("%d",&num1[i]);
for(int i=;i<n;i++)
scanf("%d",&num2[i]);
int p,idx;
for(idx=;num2[idx]<=num2[idx+];idx++);
p=idx+;
for(;num2[p]==num1[p] && p<n;p++);
//printf("idx:%d p:%d\n",idx,p);
if(p==n){
sort(num2,num2+idx+);
printf("Insertion Sort\n");
printf("%d",num2[]);
for(int i=;i<n;i++){
printf(" %d",num2[i]);
}
}
else{
int k;
bool flag=true;
for(k=;k<=n;k=(k<<)){
for(int i=;i<n;i+=k){
for(int j=i;j<i+k-&&j<n-;j++){
if(num2[j]>num2[j+]){
flag=false;
break;
}
}
if(!flag)
break;
}
if(!flag)
break;
}
for(int i=;i<n;i+=k){
if(i+k-<n){
sort(num2+i,num2+i+k);
}
else
sort(num2+i,num2+n);
}
printf("Merge Sort\n");
printf("%d",num2[]);
for(int i=;i<n;i++){
printf(" %d",num2[i]);
}
}
return ;
}
最新文章
- bootstrap深入理解之格子布局
- jquery.validate使用 - 自定义验证方法
- iOS开发UI篇—Quartz2D简单介绍
- POJ 1451 T9
- BZOJ3563 : DZY Loves Chinese
- php面向对象的特性:OOP的继承
- CSS 概览(CSS2.1)更新时间2014-0406
- 如何在获取Datarow对象在其所属DataTable中的Index
- Unix/Linux环境C编程入门教程(29) 内存操作那些事儿
- ArrayList 遍历
- 快学 Scala 入门 3 部曲
- jstl 处理Date 时间
- v-for 在 VSCode 中出现 Elements in iteration expect to have &#39;v-bind:key&#39; directives.
- Django-组件拾遗
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(一):Kitty 系统介绍
- ionic开发中遇到的问题
- django 获取 POST 请求值的几种方法(转)
- A class for dynamic icons in Windows
- 如何写摘要(abstract)
- git学习------>如何用git log命令来查看某个指定文件的提交历史记录
热门文章
- Django商城项目笔记No.1项目准备工作
- leetcode 1. Two Sum [java]
- 详解--从地址栏输入url到页面展现中间都发生了什么?
- luogu P2365 任务安排
- DataGuard之Apply Services(redo应用和SQL应用)
- Project configuration is not up-to-date with pom.xml
- 解决:linux 固定ip 导致ping 外网unknown host
- python:&#39;ascii&#39; codec can&#39;t encode character
- Exp9 20155218 Web安全基础实践
- 20155320《网络对抗》Exp2 后门原理与实践