1. 程式人生 > >JAVA入門到精通-第51講-作業講評

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



來自為知筆記(Wiz)