JAVA入门到精通-第51讲-作业讲评
一、冒泡排序
1.算法
1)比较相邻的元素,如果第一个比第二个大,就交换它们俩;
2)对每一对相邻的元素做同样的工作,从开始的第一对到结尾的最后一对,使最后的元素为最大值;
3)针对的所有的元素重复以上步骤,除了最后一个;
4)持续每次对越来越少的元素重复以上步骤,直到没有元素需要交换为止。
2.评价
平均时间复杂度:O(N^2)
稳定
对数据的有序性非常敏感
二、插入排序
1.算法
1)从第一个元素开始,该元素可以认为已经有序;
2)取出下一个元素,在已经有序的序列中从后向前扫描;
3)若该元素大于新元素,则将该元素移到下一个位置;
4)若该元素小于等于新元素,则将新元素放在该元素之后;
5)重复步骤2),直到处理完所有元素。
2.评价
平均时间复杂度:O(N^2)
稳定
对数据的有序性非常敏感
因为没有交换,所以赋值的次数比冒泡少,速度比冒泡略快。
三、选择排序
1.算法
首先在未排序序列中找到最小元素,与该序列的首元素交换,再从剩余未排序元素中继续寻找最小元素,放到有序序列的末尾。以此类推,直到所有元素均排序完毕。
2.评价
平均时间复杂度:O(N^2)
稳定
对数据的有序性不敏感
因为交换的次数少,所有速度比冒泡略快。
作业:
过三关
老孙回到花果山,众猴为迎接大圣的归来,决定列队表演猴接棍,大圣大悦,可一看队伍中高矮参差不齐,皱起眉头说到,先排好队再说,怎么没什么长进呢?
第一关:[Work17.java]
领头的老猴于是从队伍一头开始逐一的比较、交换,开始按高矮排列队伍。(设计冒泡排序的程序给队伍排序)。一柱香后,老猴还在不知疲倦地来回调整,悟空这时已不耐烦了,大叫道:快点!快点!不然我撤了你。
x
1
/**2
* 猴子过三关(冒泡排序)3
*/4
import java.util.Scanner;5
public class Work17 {6
public static void main(String[] args) {7
//定义可以装五只猴子的对象数组8
int size=5;9
Monkey []monkeys=new Monkey[size];10
Scanner sr=new Scanner(System.in);11
//初始化各个猴子12
for(int i=0;i<monkeys.length;i++){13
System.out.println("请输入第"+(i+1)+"只猴子的高度:");14
float height=sr.nextFloat();15
monkeys[i]=new Monkey((i+1)+"",height);16
}17
//让老猴排序18
Monkey oldMonkey=new Monkey("1000", 1.2f);19
//排序20
oldMonkey.bubbleSort(monkeys);21
//验证输出22
oldMonkey.show(monkeys);23
}24
}25
26
//猴子类27
class Monkey{28
private String monkeyId;29
private float height;30
public Monkey(String mokeyId,float height){31
this.monkeyId=mokeyId;32
this.height=height;33
}34
35
//冒泡排序36
public void bubbleSort(Monkey []monkeys){37
float tempHeight=0f;38
String tempId="";39
//外层循环length-140
for(int i=0;i<monkeys.length-1;i++){41
//内层循环length-1-i42
for(int j=0;j<monkeys.length-1-i;j++){43
//判断44
if(monkeys[j].height>monkeys[j+1].height){45
//身高交换46
tempHeight=monkeys[j].height;47
monkeys[j].height=monkeys[j+1].height;48
monkeys[j+1].height=tempHeight;49
//编号交换50
tempId=monkeys[j].monkeyId;51
monkeys[j].monkeyId=monkeys[j+1].monkeyId;52
monkeys[j+1].monkeyId=tempId;53
}54
}55
}56
}57
58
//显示队列59
public void show(Monkey []monkeys){60
for(int i=0;i<monkeys.length;i++){61
System.out.println("猴子编号:"+monkeys[i].monkeyId+"身高:"+monkeys[i].height);62
}63
}64
}-------------------------------------------------------------------------------
第二关:[Work18.java]
老猴没办法,只有再次开始排。这时他用选择法,希望能快一点(你帮他设计这个选择排序程序)可大圣还对速度不满意,说道:你难道不能排的更快些吗?
x
1
/**2
* 猴子过三关(选择排序)3
*/4
import java.util.Scanner;5
public class Work18 {6
public static void main(String[] args) {7
//定义可以装五只猴子的对象数组8
int size=5;9
Monkey []monkeys=new Monkey[size];10
Scanner sr=new Scanner(System.in);11
//初始化各个猴子12
for(int i=0;i<monkeys.length;i++){13
System.out.println("请输入第"+(i+1)+"只猴子的高度:");14
float height=sr.nextFloat();15
monkeys[i]=new Monkey((i+1)+"",height);16
}17
//让老猴排序18
Monkey oldMonkey=new Monkey("1000", 1.2f);19
//排序20
oldMonkey.selectSort(monkeys);21
//验证输出22
oldMonkey.show(monkeys);23
}24
}25
26
//猴子类27
class Monkey{28
private String monkeyId;29
private float height;30
public Monkey(String mokeyId,float height){31
this.monkeyId=mokeyId;32
this.height=height;33
}34
35
//选择排序(用外循环做为下标交换)36
public void selectSort(Monkey []monkeys){37
float tempHeight=0f;38
String tempId="";39
for(int i=0;i<monkeys.length;i++){40
//认为下标为i的猴子身高是最低的41
float minHeight=monkeys[i].height;42
int minIndex=i;43
//和后面猴子比较44
for(int j=i+1;j<monkeys.length;j++){45
if(minHeight>monkeys[j].height){46
//修正最低值47
minHeight=monkeys[j].height;48
minIndex=j;49
}50
if(minIndex!=i){51
//交换52
tempHeight=monkeys[minIndex].height;53
monkeys[minIndex].height=monkeys[i].height;54
monkeys[i].height=tempHeight;55
56
tempId=monkeys[minIndex].monkeyId;57
monkeys[minIndex].monkeyId=monkeys[i].monkeyId;58
monkeys[i].monkeyId=tempId;59
}60
}61
}62
}63
64
//显示队列65
public void show(Monkey []monkeys){66
for(int i=0;i<monkeys.length;i++){67
System.out.println("猴子编号:"+monkeys[i].monkeyId+"身高:"+monkeys[i].height);68
}69
}70
}-------------------------------------------------------------------------------
第三关[Work19.java]
老猴只好最后赌一把,采用还不是很熟悉的插入法排序。聪明的你,能够帮助老猴解决这个问题吗?
x
61
1
/**2
* 猴子过三关(插入排序)3
*/4
import java.util.Scanner;5
public class Work19 {6
public static void main(String[] args) {7
//定义可以装五只猴子的对象数组8
int size=5;9
Monkey []monkeys=new Monkey[size];10
Scanner sr=new Scanner(System.in);11
//初始化各个猴子12
for(int i=0;i<monkeys.length;i++){13
System.out.println("请输入第"+(i+1)+"只猴子的高度:");14
float height=sr.nextFloat();15
monkeys[i]=new Monkey((i+1)+"",height);16
}17
//让老猴排序18
Monkey oldMonkey=new Monkey("1000", 1.2f);19
//排序20
oldMonkey.insertSort(monkeys);21
//验证输出22
oldMonkey.show(monkeys);23
}24
}25
26
//猴子类27
class Monkey{28
private String monkeyId;29
private float height;30
public Monkey(String mokeyId,float height){31
this.monkeyId=mokeyId;32
this.height=height;33
}34
35
//插入排序36
public void insertSort(Monkey []monkeys){37
//开始排序38
for(int i=1;i<monkeys.length;i++){39
//先记录该猴子的身高40
float insertHeight=monkeys[i].height;41
String insertId=monkeys[i].monkeyId;42
int insertIndex=i-1;43
while(insertIndex>=0&&monkeys[insertIndex].height>insertHeight){44
monkeys[insertIndex+1].height=monkeys[insertIndex].height;45
monkeys[insertIndex+1].monkeyId=monkeys[insertIndex].monkeyId;46
insertIndex--;47
}48
//插入49
monkeys[insertIndex+1].height=insertHeight;50
monkeys[insertIndex+1].monkeyId=insertId;51
}52
}53
54
//显示队列55
public void show(Monkey []monkeys){56
for(int i=0;i<monkeys.length;i++){57
System.out.println("猴子编号:"+monkeys[i].monkeyId+"身高:"+monkeys[i].height);58
}59
}60
}61
浙公网安备 33010602011771号