一、冒泡排序
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-1
40
for(int i=0;i<monkeys.length-1;i++){
41
//内层循环length-1-i
42
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