演算法和資料結構在JS中的運用(二)

2021-10-11 01:35:55 字數 4469 閱讀 2413

舉例

//找出兩個數中較小的那個

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...

演算法和資料結構

演算法和資料結構 演算法和資料結構 千絲萬縷的聯絡 縱觀各種演算法書籍,大多都是將演算法和資料結構作為乙個整體來講述。資料結構就是陣列 樹結構等儲存或表現物件資料的結構。將演算法和資料結構作為整體講述,是因為必須依照演算法中的常用操作選擇資料結構。例如,事先將資料儲存在適當的樹形結構中,大多數情況下...