舉例
//找出兩個數中較小的那個
letmin1
=(nums)
=>
else
}//優化**
letmin1
= nums => nums[0]
< nums[1]
? nums[0]
: nums[1]
;//再次優化**
letmin1=(
[x,y]
)=> x < y ? x : y;
//呼叫
min1([
1,2]
);//1 新手寫法
min.
call
(null,[
1,2]
);//1 高手呼叫法
//找出三個數中最小的那個
letmin2=(
[x,y,z]
)=>
//繼續
letmin3
=(w,x,y,z)
=>
//找出陣列中的最小值 遞迴
letmin4
=(nums)
=>
else
}
遞迴
函式不停的呼叫自己,每次呼叫,引數有所不同
當滿足乙個簡單條件時,則實現乙個簡單的呼叫
最終運算出結果
可以代入法快速理解遞迴
可以用呼叫棧快速理解遞迴
排序演算法
選擇排序
//選擇排序
//找出陣列中最小的index
letminindex
=(nums)
=>
}return index;
}//交換資料
letswap
=(arr,i,j)
=>
//選擇排序
letselectsort
=(nums)
=>`)
;let index =
minindex
(nums.
slice
(i))
+ i;
console.
log(
`index:$`
);console.
log(
`min:$`
);if(index != i):$
`); console.
log(nums);}
}return nums;
}selectsort([
1,6,
5]);
vm173:20
----
vm173
:21 i:
0vm173
:23 index:
0vm173
:24 min:
1vm173:20
----
vm173
:21 i:
1vm173
:23 index:
2vm173
:24 min:
5vm173
:27 swap 2:1
vm173:28
(3)[
1,5,
6]
快速排序//快速排序
letquicksort
= arr =>`)
;let middlevalue = arr.
splice
(middle,1)
[0];
console.
log(
`middlevalue:$`
);let left =
,right =
;for
(let i =
0; i < arr.length; i++
)else
} console.
log(
`left:$`
);console.
log(
`right:$`
);return
quicksort
(left)
.concat
([middlevalue]
,quicksort
(right));
}quicksort([
2,32,
1,4343
,222,-
1]);
vm106:4
----
vm106
:6 middle:
3vm106
:8 middlevalue:
4343
vm106
:17 left:2,
32,1,
222,-1
vm106
:18 right:
vm106:4
----
vm106
:6 middle:
2vm106
:8 middlevalue:
1vm106
:17 left:-1
vm106
:18 right:2,
32,222vm106:4
----
vm106
:6 middle:
1vm106
:8 middlevalue:
32vm106
:17 left:
2vm106
:18 right:
222(6)
[-1,
1,2,
32,222,
4343
]
歸併排序let
merge
=(a,b)
=>
letmergesort
= arr =>`)
; console.
log(
`right:$`
);return
merge
(mergesort
(left)
,mergesort
(right));
}mergesort([
23,3,
222,
133,4,
555,33]
);vm304:13
----
vm304
:14 left:23,
3,222vm304
:15 right:
133,4,
555,
33vm304:13
----
vm304
:14 left:
23vm304
:15 right:3,
222vm304:13
----
vm304
:14 left:
3vm304
:15 right:
222vm304:13
----
vm304
:14 left:
133,
4vm304
:15 right:
555,
33vm304:13
----
vm304
:14 left:
133vm304
:15 right:
4vm304:13
----
vm304
:14 left:
555vm304
:15 right:33(
7)[3
,4,23
,33,133
,222
,555
]
計數排序let
其他排序演算法總結
氣泡排序
插入排序
希爾排序
基數排序
js演算法和資料結構
增 arr.push 3 尾部新增 引數不能是陣列 arr arr.length 4 尾部新增 arr.unshift 0 頭部新增 arr.splice 在指定位置增加 刪delete arr 2 刪除指定變為undefine arr.length 1 移除尾部元素 arr.pop 移除尾部元素 ...
演算法和資料結構(二) 演算法
接著上篇部落格,這篇部落格我們一起看看傳說中的演算法 早知道這麼簡單,早點看看的話,阿里也就去了,淚奔.面試常見的演算法分為兩種 排序演算法和查詢演算法。1 逐個比較相鄰的兩個元素,將較大的值往後放 2 第一輪比較完最大的元素放陣列最後,第二輪剩下的元素裡最大的元素放陣列倒數第二位.public c...
演算法和資料結構
演算法和資料結構 演算法和資料結構 千絲萬縷的聯絡 縱觀各種演算法書籍,大多都是將演算法和資料結構作為乙個整體來講述。資料結構就是陣列 樹結構等儲存或表現物件資料的結構。將演算法和資料結構作為整體講述,是因為必須依照演算法中的常用操作選擇資料結構。例如,事先將資料儲存在適當的樹形結構中,大多數情況下...