JAVA入門到精通-第51講-作業講評
阿新 • • 發佈:2018-11-30
一、氣泡排序 1.演算法 1)比較相鄰的元素,如果第一個比第二個大,就交換它們倆; 2)對每一對相鄰的元素做同樣的工作,從開始的第一對到結尾的最後一對,使最後的元素為最大值; 3)針對的所有的元素重複以上步驟,除了最後一個; 4)持續每次對越來越少的元素重複以上步驟,直到沒有元素需要交換為止。 2.評價 平均時間複雜度:O(N^2) 穩定 對資料的有序性非常敏感
二、插入排序 1.演算法 1)從第一個元素開始,該元素可以認為已經有序;
三、選擇排序 1.演算法 首先在未排序序列中找到最小元素,與該序列的首元素交換,再從剩餘未排序元素中繼續尋找最小元素,放到有序序列的末尾。以此類推,直到所有元素均排序完畢。
P.225
作業:
過三關
老孫回到花果山,眾猴為迎接大聖的歸來,決定列隊表演猴接棍,大聖大悅,可一看隊伍中高矮參差不齊,皺起眉頭說到,先排好隊再說,怎麼沒什麼長進呢?
第一關:[Work17.java]
領頭的老猴於是從隊伍一頭開始逐一的比較、交換,開始按高矮排列隊伍。(設計氣泡排序的程式給隊伍排序)。一柱香後,老猴還在不知疲倦地來回調整,悟空這時已不耐煩了,大叫道:快點!快點!不然我撤了你。
x1
/**
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]
老猴沒辦法,只有再次開始排。這時他用選擇法,希望能快一點(你幫他設計這個選擇排序程式)可大聖還對速度不滿意,說道:你難道不能排的更快些嗎?
x1
/**
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)