小練習
+ 主題 - 抽牌問題 氣泡排序法Bubble Sort
+ 問題 - 假設今天有52張牌,抽出13張,必須按照花色與大小排列,且不能用到sort(),要怎麼做出這樣的抽牌問題?
+ 邏輯 -
- 建立array包含1~52,1~13表示梅花,14~26表示方塊,27~39表示愛心,40~52表示黑桃,抽出不重複的13張牌。
- 按照大小排列。
- 將其轉換成花色。
- 新增牌組出來,同時篩選紅得與黑的花色。
+ JS語法筆記 -
//Math.random() 乘上 要抽的牌數Math.random() - 0~1之間不包含1。
//splice(索引位置, 刪除項目數量, 新增數量) : 抽出後刪除原陣列,就不會重複
刪除項目數量可以是0,表示新增。新增數量可以是空白,表刪除。
//氣泡排序法 :
各種排序法:https://blog.techbridge.cc/2017/08/19/sotring-algorithm/
氣泡排序詳解:https://pjchender.blogspot.com/2017/09/bubble-sort.html
+實作技巧 -
1. 利用splice,就可以抽取不重複的數字,但切記要先複製也就是concat到新的陣列當中,再splice2. 氣泡排序法
方法一
function bubbleSort(mybox) {
let toIndex = mybox.length;
for(i=0;i<14;i++){
for(j=0;j<toIndex-1-i;j++){
if(mybox[j]<mybox[j+1]){
[mybox[j],mybox[j+1]]=[mybox[j+1],mybox[j]];
// 最後用ES6的語法,進行前後交換
}
}
}
// 13個數字,每個數字都要進行比較對調交換位子的動作
// 13個數字但只要對調12次,因為最後一個數字沒得對調,-i的意思是有幾個數字已經排好不用再對調了
// 比方第一次對調的動作,會找到最大的數字,放在最後位置
// 那第二次要開始對調時,最後一個位置已經被決定好,那他這次要做-i次也就是少一次的對調工作
方法二
3.用選擇器選擇包含愛心跟方塊的p,改變class
"p:contains('♥︎')"
while (toIndex > 1) {
toIndex--
for (let i = 0; i < toIndex; i++) {
// 如果前面的元素比後面的元素要大,則交換元素位置
if (mybox[i] > mybox[i + 1]) {
let tempValue = mybox[i]
mybox[i] = mybox[i + 1]
mybox[i + 1] = tempValue
}
}
}
"p:contains('♥︎')"
留言
張貼留言