Java实现 蓝桥杯VIP 算法提高 插入排序
算法提高 插入排序
时间限制:1.0s 内存限制:256.0MB
插入排序
问题描述
排序,顾名思义,是将若干个元素按其大小关系排出一个顺序。形式化描述如下:有n个元素a[1],a[2],…,a[n],从小到大排序就是将它们排成一个新顺序a[i[1]]<a[i[2]]<…<a[i[n]]
i[k]为这个新顺序。
插入排序,顾名思义,是通过插入操作完成排序。其直觉和方法来源于打牌时安排牌的方法。每次摸起一张牌,你都会将其插入到现在手牌中它按顺序应在的那个位置。插入排序每一步都类似这个摸牌过程。比如现在有整数数组:{3, 1, 5, 4, 2}
第一步:插入3 得到新序列{3}
第二步:插入1 得到新序列{1 3}
第三步:插入5 得到新序列{1 3 5}
第四步:插入4 得到新序列{1 3 4 5}
第五步:插入2 得到新序列{1 2 3 4 5}
为了看程序中如何完成插入过程,我们以第五步为例:
初始时:1 3 4 5 2
将2存入临时变量tmp
将下标j指向2之前的元素5,然后根据tmp和a[j]的大小关系决定该元素是否应该后移。如果a[j]>tmp,则将a[j]后移到a[j+1],序列变成1 3 4 5 5。
将下标j前移
判断a[j]>tmp,后移a[j]到a[j+1],得到1 3 4 4 5
将下标j前移
判断a[j]>tmp,后移a[j]到a[j+1],得到1 3 3 4 5
因为a[j]<=tmp,所以将tmp放回a[j+1],得到 1 2 3 4 5
现在,输入n个整数,根据以上算法,输出插入排序的全过程。
输入格式
第一行一个正整数n,表示元素个数
第二行为n个整数,以空格隔开
输出格式
有n个元素,因此输出部分分为n个部分,每个部分开头行为:Insert element[i],i为第几个元素。然后对于每一个部分,输出该部分该元素在插入排序过程中的每一步产生的新序列,初始时的序列以Init:打头,然后每一步后移数组元素后的元素序列以Move back:打头,最后得到的最终结果序列以Final:打头。序列元素间以一个空格隔开。示例请看样例输出。每一个部分的Insert element[i]之后的每一步的输出行之前要缩进两格,即输出两个空格。
样例输入
5
3 1 5 4 2
样例输出
Insert element[1]:
Init:3
Final:3
Insert element[2]:
Init:3 1
Move back:3 3
Final:1 3
Insert element[3]:
Init:1 3 5
Final:1 3 5
Insert element[4]:
Init:1 3 5 4
Move back:1 3 5 5
Final:1 3 4 5
Insert element[5]:
Init:1 3 4 5 2
Move back:1 3 4 5 5
Move back:1 3 4 4 5
Move back:1 3 3 4 5
Final:1 2 3 4 5
数据规模和约定
n<=100
整数元素在int范围内
import java.util.Scanner;
public class 插入排序 {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
int a=s.nextInt();
int[] arr=new int[a];
for (int i = 0; i < arr.length; i++) {
arr[i]=s.nextInt();
}
show(arr);
}
static void show(int[] arr){
int[] str=new int[arr.length];
for (int i = 0; i < str.length; i++) {
System.out.println("Insert element["+(i+1)+"]:");
str[i]=arr[i];
int a=str[i];
System.out.println("Init:"+f(str,i));
if(str.length>1){
int b=i;
for (int j = str.length-1; j >=0; j--) {
if(a<str[j]){
str[b]=str[j];
System.out.println("Move back:"+f(str,i));
str[j]=a;
a=str[j];
b=j;
}
}
}
System.out.println("Final:"+f(str,i));
}
}
static String f(int[] arr,int n){
String str="";
for (int i = 0; i <= n; i++) {
str+=arr[i]+" ";
}
return str;
}
}
Java实现 蓝桥杯VIP 算法提高 插入排序的更多相关文章
- Java实现 蓝桥杯VIP 算法提高 研究兔子的土豪
试题 算法提高 研究兔子的土豪 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 某天,HWD老师开始研究兔子,因为他是个土豪 ,所以他居然一下子买了一个可以容纳10^18代兔子的巨大 ...
- Java实现 蓝桥杯VIP 算法提高 3-2求存款
算法提高 3-2求存款 时间限制:1.0s 内存限制:256.0MB 问题描述 见计算机程序设计基础(乔林)P50第5题. 接受两个数,一个是用户一年期定期存款金额,一个是按照百分比格式表示的利率,计 ...
- Java实现 蓝桥杯VIP 算法提高 3-3求圆面积表面积体积
算法提高 3-3求圆面积表面积体积 时间限制:1.0s 内存限制:256.0MB 问题描述 接受用户输⼊的数值,输出以该值为半径的(1)圆面积,(2)球体表面积,(3)球体体积.pi 取值3.1415 ...
- Java实现 蓝桥杯VIP 算法提高 5-3日历
算法提高 5-3日历 时间限制:1.0s 内存限制:256.0MB 问题描述 已知2007年1月1日为星期一.设计一函数按照下述格式打印2007年以后(含)某年某月的日历,2007年以前的拒绝打印.为 ...
- Java实现 蓝桥杯VIP 算法提高 11-2删除重复元素
算法提高 11-2删除重复元素 时间限制:10.0s 内存限制:256.0MB 问题描述 为库设计新函数DelPack,删除输入字符串中所有的重复元素.不连续的重复元素也要删除. 要求写成函数,函数内 ...
- Java实现 蓝桥杯VIP 算法提高 P0401
算法提高 P0401 时间限制:1.0s 内存限制:256.0MB 输入一个无符号整数x,输出x的二进制表示中1的个数. 输入: 76584 输出: 7 import java.util.Scanne ...
- Java实现 蓝桥杯VIP 算法提高 理财计划
算法提高 理财计划 时间限制:1.0s 内存限制:256.0MB 问题描述 银行近期推出了一款新的理财计划"重复计息储蓄".储户只需在每个月月初存入固定金额的现金,银行就会在每个月 ...
- Java实现 蓝桥杯VIP 算法提高 解二元一次方程组
算法提高 解二元一次方程组 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个二元一次方程组,形如: a * x + b * y = c; d * x + e * y = f; x,y代 ...
- Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2
算法提高 陶陶摘苹果2 时间限制:1.0s 内存限制:256.0MB 问题描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出n个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳, ...
随机推荐
- 02JAVA基础-运算符及选择语句
一.运算符 1.算数运算符 算数运算符 备注 + 可以用作拼接 - * / 整数相除得整数,需要获得小数,需一方为浮点数 % 取余数 ++ 自增 -- 自减 扩展(1) 对于++和--的扩展(以++为 ...
- 去除 HTML 和 PHP 标记
strip_tags()函数,从字符串中去除html和php标记,随笔记一下,如果看过就过去,下次再找可能又会费点事,记下来下次好找
- 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来
上一篇文章(https://www.cnblogs.com/meowv/p/12896177.html)已经成功创建了博客项目,但是abp默认给我们引用了许多项目中用不到的组件. 本篇文章将给项目进行 ...
- throttle和debounce
遇到的问题 在开发过程中会遇到频率很高的事件或者连续的事件,如果不进行性能的优化,就可能会出现页面卡顿的现象,比如: 鼠标事件:mousemove(拖曳)/mouseover(划过)/mouseWhe ...
- Vue element-ui date-picker 结束时间大于开始时间且开始时间小于此刻(转)
转载自:https://blog.csdn.net/wintersweetGirl/article/details/82461412 <el-form ref="form" ...
- VIOS挂载ISO文件
6.VIOS挂载ISO文件 1.给vhost建立虚拟设备 mkvdev -vadapter vhostX -fbo -dev cdx 2.建立存放ISO的资料库 mkrep -sp rootvg -s ...
- Hbase javaAPI报错:Callexception,tries=10,retries=35,started=38465msago
[client.RpcRetryingCaller(142)]Callexception,tries=10,retries=35,started=38465msago,cancelled=false, ...
- 【c#】Visual Studio 的下载及安装
“工欲善其事,必先利其器” 这篇博文我们介绍一下如何正确的安装基于c#使用的vs 2017. 1.首先在官网下载Visual Studio,下载地址:https://www.visualstudio. ...
- 三、HTML元素
嵌套的HTML元素 <!--以下实例包含了三个HTML元素,分别是<html>.<body>.<p>--> <!DOCTYPE html> ...
- java——定时任务
java定时任务直接看代码 public void timeTask(){ Timer timer = new Timer(); timer.schedule(new TimerTask() { pu ...