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)
稳定
对数据的有序性不敏感
因为交换的次数少,所有速度比冒泡略快。

P.225

作业:

过三关

老孙回到花果山,众猴为迎接大圣的归来,决定列队表演猴接棍,大圣大悦,可一看队伍中高矮参差不齐,皱起眉头说到,先排好队再说,怎么没什么长进呢?

第一关:[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]

老猴没办法,只有再次开始排。这时他用选择法,希望能快一点(你帮他设计这个选择排序程序)可大圣还对速度不满意,说道:你难道不能排的更快些吗?

扫描二维码关注公众号,回复: 4306019 查看本文章
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





猜你喜欢

转载自www.cnblogs.com/xuxaut-558/p/10045791.html