zoukankan      html  css  js  c++  java
  • 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]

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

    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





  • 相关阅读:
    POJ 2253 Frogger
    C++map函数的用法
    蓝桥杯 幂方分解
    蓝桥杯 危险系数
    POJ 2234 Matches Game
    POJ 1852 Ants
    POJ 1144 Network
    POJ1419 Graph Coloring
    poj 2573 Bridge(有A、B、C、D四个人,要在夜里过一座桥……)
    小知识(输出源文件的标题和目前执行行的行数)
  • 原文地址:https://www.cnblogs.com/xuxaut-558/p/10045791.html
Copyright © 2011-2022 走看看