材料:猴子排序,按照身高来从小到大来排序。
第一关:
老猴子带领小猴子队伍按大小逐一比较,交换,开始高矮排列队伍。(冒泡排序)
第二关:
太慢了,给第一关增加难度,进行选择排序
第三关:
最后,尝试选择用插入排序法,来进行排序。
测试类:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
//功能:猴子排序
public class MonkeySelect {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 定义一个可以装5只猴子的对象数组
int size = 5;
Monkey[] monkeys = new Monkey[size];
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
// 初始化各个猴子
for (int i = 0; i < monkeys.length; i++) {
System.out.println("请输入第" + (i + 1) + "只猴子的高度");
try {
String height = br.readLine();
monkeys[i] = new Monkey((i + 1) + "", Float.parseFloat(height));
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 让老猴子排序
Monkey oldMonkey = new Monkey("1000", 1.2f);
// 冒泡排序
oldMonkey.bubbleSort(monkeys);
// oldMonkey.selectSort(monkeys);选择排序调用
// oldMonkey.insertSort(monkeys);插入排序调用
// 验证
oldMonkey.show(monkeys);
}
}
猴子类(功能):
// 猴子
class Monkey {
private String monkeyId;
private float height;
public Monkey(String monkeyId, float height) {
this.monkeyId = monkeyId;
this.height = height;
}
// 插入排序
public void insertSort(Monkey[] monkeys) {
// 开始排序
for (int i = 0; i < monkeys.length; i++) {
// 先记录该猴子的身高
float insertHeight = monkeys[i].height;
String insertNo = monkeys[i].monkeyId;
int insertIndex = i - 1;
while (insertIndex >= 0
&& monkeys[insertIndex].height > insertHeight) {
monkeys[insertIndex + 1].height = monkeys[insertIndex].height;
monkeys[insertIndex + 1].monkeyId = monkeys[insertIndex].monkeyId;
insertIndex--;
}
// 插入
monkeys[insertIndex + 1].height = insertHeight;
monkeys[insertIndex + 1].monkeyId = insertNo;
}
}
// 选择排序
public void selectSort(Monkey[] monkeys) {
float tempHeight = 0.0f;
String tempNo = "";
for (int i = 0; i < monkeys.length; i++) {
float minHeight = monkeys[i].height;
int minIndex = i;
// 和后面的比较
for (int j = i + 1; j < monkeys.length; j++) {
if (minHeight > monkeys[j].height) {
// 修正一下最小值
minHeight = monkeys[j].height;
// 修正下标
minIndex = j;
}
}
if (minIndex != i) {
// 交换
tempHeight = monkeys[minIndex].height;
monkeys[minIndex].height = monkeys[i].height;
monkeys[i].height = tempHeight;
tempNo = monkeys[minIndex].monkeyId;
monkeys[minIndex].monkeyId = monkeys[i].monkeyId;
monkeys[i].monkeyId = tempNo;
}
}
}
// 冒泡排队
public void bubbleSort(Monkey[] monkeys) {
float tempHeight = 0.0f;
String tempNo = "";
// 冒泡
for (int i = 0; i < monkeys.length - 1; i++) {
for (int j = 0; j < monkeys.length - 1 - i; j++) {
// 判断
if (monkeys[j].height > monkeys[j + 1].height) {
// 身高
tempHeight = monkeys[j].height;
monkeys[j].height = monkeys[j + 1].height;
monkeys[j + 1].height = tempHeight;
// 编号
tempNo = monkeys[j].monkeyId;
monkeys[j].monkeyId = monkeys[j + 1].monkeyId;
monkeys[j + 1].monkeyId = tempNo;
}
}
}
}
// 显示队列
public void show(Monkey[] monkeys) {
for (int i = 0; i < monkeys.length; i++) {
System.out.println("猴子编号:" + monkeys[i].monkeyId + " 身高:"
+ monkeys[i].height);
}
}
}
java冒泡排序-选择排序-插入排序-使用API中文文档直接调用函数
import java.util.Arrays; public class ArrayDemo2_3 { public static void main(String []args) { //---- ...
学习C#之旅 冒泡排序,选择排序,插入排序,希尔排序[资料收集]
关于冒泡排序,选择排序,插入排序,希尔排序[资料收集] 以下资料来源与网络 冒泡排序:从后到前(或者从前到后)相邻的两个两两进行比较,不满足要求就位置进行交换,一轮下来选择出一个最小(或最大)的放到 ...
python算法(一)基本知识&;冒泡排序&;选择排序&;插入排序
本节内容: 算法基本知识 冒泡排序 选择排序 插入排序 1. 算法基本知识 1.1 什么是算法? 算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为 ...
数组排序-冒泡排序-选择排序-插入排序-希尔排序-快速排序-Java实现
这五种排序算法难度依次增加. 冒泡排序: 第一次将数组相邻两个元素依次比较,然后将大的元素往后移,像冒泡一样,最终最大的元素被移到数组的最末尾. 第二次将数组的前n-1个元素取出,然后相邻两个元素依次 ...
冒泡排序 选择排序 插入排序希尔排序 java
双向冒泡 package com.huang; public class _014_bubb_sort { int[] b={1,2}; static int a[]={12,4,35,65,43,6 ...
冒泡排序 &; 选择排序 &; 插入排序 &; 希尔排序 JavaScript 实现
之前用 JavaScript 写过 快速排序 和 归并排序,本文聊聊四个基础排序算法.(本文默认排序结果都是从小到大) 冒泡排序 冒泡排序每次循环结束会将最大的元素 "冒泡" 到最 ...
php基础排序算法 冒泡排序 选择排序 插入排序 归并排序 快速排序
算法 排序lowB三人组 冒泡排序 选择排序 插入排序
参考博客:基于python的七种经典排序算法 [经典排序算法][集锦] 经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一 ...
lowB三人组算法-冒泡排序-选择排序-插入排序
冒泡排序 时间复杂度:O(n2) 算法稳定 第一趟,从第一个数开始,相邻两个数比较,大的数交换放后,交换到最后位置得出一个第一大数 第二趟,从第一个数开始,相邻两个数比较,大的数交换放后,交换到倒数 ...
随机推荐
[NHibernate]HQL查询
目录 写在前面 文档与系列文章 查询的几种方式 HQL查询 一个例子 总结 写在前面 上篇文章介绍了nhibernate在项目中的基本配置,包括数据库连接字符串的设置,映射文件的配置及需注意的地方,这 ...
iOS - 利用runtime加深对基础知识的理解
利用runtime加深对基础知识的理解 如果对runtime需要学习,可以看这篇,以下仅作为学习笔记,相互交流. runtime的头文件: #import ...
mysql explain详解
对于经常使用mysql的兄弟们,对explain一定不会陌生.当你在一条SELECT语句前放上关键词EXPLAIN,MySQL解释它将如何处理SELECT,提供有关表如何联合和以什么次序的信息.借助于 ...
KnockoutJS(1)-数据模型
前言 说到数据模型(ViewModel),就不得不提到MVVM模式,接触过WPF和Silverlight的人应该对这个模式比较熟悉. 不熟悉也没多大关系,因为KnockoutJS的使用相对简单. MV ...
tomcat启动端口号报错java.net.BindException: Cannot assign requested address
异常信息 时间:2017-02-09 15:09:59,829 - 级别:[ERROR] - 消息: [other] Failed to start end point associated with ...
Asp.Net WebApi 调试利器“单元测试”
当我们编辑好一个WebApi应用程序后,需要对该Api接口进行调试,传统的调试办法是在方法内设置断点,然后用PostMan等http工具模拟访问进行查看WebAPI的运行情况,但这种除了效率较低还进行 ...
在FFMPEG中使用libRTMP的经验
FFMPEG在编译的时候可以选择支持RTMP的类库libRTMP.这样ffmpeg就可以支持rtmp://, rtmpt://, rtmpe://, rtmpte://,以及 rtmps://协议了. ...
flask之信号和mateclass元类
本篇导航: flask实例化参数 信号 metaclass元类解析 一.flask实例化参数 instance_path和instance_relative_config是配合来用的:这两个参数是用来 ...
javascript 面向过程和面向对象
面向过程 思维方式:把解决问题的关注点,放到解决问题的每一个详细步骤上面. 面向对象 思维方式:把解决问题的关注点,放到解决问题需要的一些对象身上. 创建对象: 对象字面量 使用内置构造对象 封装简单 ...
[蓝桥杯]ALGO-84.算法训练_大小写转换
题目描述: 问题描述 编写一个程序,输入一个字符串(长度不超过20),然后把这个字符串内的每一个字符进行大小写变换,即将大写字母变成小写,小写字母变成大写,然后把这个新的字符串输出. 输入格式:输入一 ...