冒泡排序
什么是冒泡排序: 陣列當中相鄰的兩個數進行比較,陣列當中比較小的數值向下沉,數值比較大的向上浮!外層for回圈控制回圈次數,內層for回圈控制相鄰的兩個元素進行比較,
冒泡排序演算法的原理如下:
比較相鄰的元素,如果第一個比第二個大,就交換他們兩個,
針對所有的元素重復以上的步驟,除了最后一個,直到沒有任何一對數字需要比比較
// 實作冒泡
var arr = [29,45,51,68,72,97];
//外層回圈,控制趟數,每一次找到一個最大值
for (var i = 0; i < arr.length - 1; i++) {
// 內層回圈,控制比較的次數,并且判斷兩個數的大小
for (var j = 0; j < arr.length - 1 - i; j++) {
// 白話解釋:如果前面的數大,放到后面(當然是從小到大的冒泡排序)
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
console.log(arr);//[2, 4, 5, 12, 31, 32, 45, 52, 78, 89]
邏輯題
1.中國有一套反導系統,某國向中國發射N枚導彈,導彈系統有一個bug,10000米導彈飛過來,射下來,發射過來
[10000,5888,12000,6999,7000,3000,4500,1200,6000],需要多少個反導系統可以全部攔截下來,
// let index = null; //要存入的次數
// let arr = [10000, 5888,3800,6000,7654,568,445,6680,500,4030,10008,6900,]; //導彈陣列
// for (let i = 0; i < arr.length; i++) {//第一遍回圈對比
// let db = arr[i];
// for (let j = 1; j < arr.length; j++) {
// if (db > arr[j]) {//變數進行對比 高度陣列進行對換
// db = arr[j]; //換位
// arr.splice(j, 1); //不符合的次數截取
// }
// console.log(i);
// index = i + 1; //計算
// }
// }
// console.log(index);
冒泡優點: 簡單,好上手
缺點:效率不高
遞回呼叫
遞回的概念
1、遞回就是方法自己呼叫自己,每次呼叫時傳入不同的變數,
2、遞回有助于解決復雜的問題,同時可以讓代碼變得簡潔,
遞回的作用
-
替代多重回圈:比如回溯法中有用到遞回來做,
-
解決本身就是用遞回形式定義的問題
-
將問題分解為規模更小的子問題進行求解
遞回就是一個函式呼叫其本身,
例,求n!
int factorial(int n){
if(n==1) return 1;
return n*factorial(n-1);
}
執行程序,比如求factorial(5)
1. fac(5) = 5 * fac(4),求fac(4)
2. fac(4) = 4 * fac(3),求fac(3)
3. fac(3) = 3 * fac(2),求fac(2)
4. fac(2) = 2 * fac(1),求fac(1)
5. fac(1) = 1
6. fac(2) = 2 * fac(1) = 2*1 = 2
7. fac(3) = 3 * fac(2) = 3* 2 = 6
8. fac(4) = 4 * fac(3) = 4*6 = 24
9. fac(5) = 5 * fac(4) = 5*24 = 120
// 一個簡單的階乘函式
var f = function (x) {
if (x === 1) {
return 1;
} else {
return x * f(x - 1);
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/247628.html
標籤:其他
上一篇:編程,又一次的開始
