程式演算法入門基礎分享
- 2020 年 9 月 3 日
- 筆記
演算法高深莫測,還有很多值得去學習的,下面是純屬是我自己興趣研究的結合網上的整理的演算法程式。
// 冒泡排序=========================================
var arr = [3, 6, 8, 7, 2, 1, 5];
for (var i = 0; i <= arr.length-1; ++i) {
console.log('第'+i+'次結果---->' + arr)
for (var j = 0; j <= arr.length-i-1; ++j) {
console.log('過程---->' + arr)
if (arr[j] > arr[j+1]) {
var midNum = arr[j+1];
arr[j+1] = arr[j];
arr[j] = midNum;
}
}
}
console.log('最終結果---->' + arr)
// 遞歸演算法==========================================
/* function firstA(n){
if(n == 1){
return 1;
}
else{
return firstA(n - 1)*n;
}
}
console.log(firstA(3)) */
// 遞歸演算法實戰使用====================================
var data = [{
id: '1',
name: 'a',
pid: '0'
},
{
id: '2',
name: 'b',
pid: '0'
},
{
id: '3',
name: 'c',
pid: '0'
},
{
id: '4',
name: 'd',
pid: '1'
},
{
id: '5',
name: 'e',
pid: '2'
},
{
id: '6',
name: 'f',
pid: '3'
},
{
id: '7',
name: 'g',
pid: '6'
},
{
id: '8',
name: 'g',
pid: '2'
},
{
id: '9',
name: 'g',
pid: '0'
},
{
id: '10',
name: 'g',
pid: '1'
},
{
id: '11',
name: 'g',
pid: '3'
},
{
id: '12',
name: 'g',
pid: '11'
},
{
id: '13',
name: 'g',
pid: '2'
},
];
var addArr = [];
for (var i = 0; i < data.length; ++i) {
if (data[i].pid == '0') {
var obj = {
id: data[i].id,
name: data[i].name
}
addArr.push(obj);
}
}
function option2treeDG(data, addArr) {
for (let j = 0; j < addArr.length; j++) {
let childrenArr = [];
let addArrIndex = addArr[j];
let Id = addArrIndex.id;
for (let i = 0; i < data.length; i++) {
let crrIndex = data[i];
let parentId = crrIndex.pid;
if (parentId == Id) {
//判斷是否為子節點
let objTemp = {
id: crrIndex.id,
name: crrIndex.name
};
childrenArr.push(objTemp);
}
}
if (childrenArr.length > 0) {
addArrIndex.children = childrenArr;
//有兒子節點則遞歸
option2treeDG(data, childrenArr);
}
}
}
option2treeDG(data, addArr)
//----------------------------------------------------------------------------
//自由組合實現========================================================
var data = ['白菜', '土豆', '蘿蔔', '冬瓜', '西紅柿'];
function getGroup(data, index = 0, group = []) {
var need_apply = new Array();
// 每一次提出data裡面新的菜品
need_apply.push(data[index]);
// 組合
for (var i = 0; i < group.length; ++i) {
need_apply.push(group[i] + ',' + data[index]);
}
for(var j=0; j<need_apply.length; ++j){
group.push(need_apply[j]);
}
// group.push.apply(group, need_apply);
// 結束條件
if (index + 1 >= data.length) {
return group;
} else {
// 遞歸
return getGroup(data, index + 1, group);
}
}
console.log(getGroup(data));
純屬個人對於演算法的分享,有更好的可以一起討論

