因为 js 没有 C 语言的指针,因此咱们这里模拟数组只是模拟数组操做的思路。数组
因为本人水平有限,欢迎你们指正,看过能点个赞就更好了,谢谢你们。 bash
先建立一个ArrayList
类。app
class ArrayList {
list: any[]
length: number
constructor(list = []) {
this.list = list
this.length = list.length
}
}
复制代码
从平时的使用中咱们可知,数组的push
方法是向数组最后一位添加元素,数组长度会变为this.length + 1
,数组最后一位的数组下标为 this.length
。因此咱们的新增方法能够写成:ui
appendChild(item: any) {
this.list[this.length] = item
this.length++
}
复制代码
假定被删除元素下标为 i
this
this.list[i]
i
开始,this.list[i] = this.list[i + 1]
,元素被删除,后面全部元素向前进一位。removeChild(index: number) {
let removeItem = this.list(index)
let length = this.length
// 从被删除的元素开始向前移动
for (let i = index; i < length - 1; i++) {
this.list[i] = this.list[i + 1]
}
// 删除最后一个空位
delete this.list[length - 1]
this.list.length--
this.length--
return removeItem
}
复制代码
i,j
,对应须要反转数组的头尾i++, j--
i >= j
时,中止互换// 反转
inversion(arys = null) {
let list = arys || this.list
let length = list.length - 1
// i 表明 头, j 表明尾部下标
let i = 0, j = length - i, t: any;
while (j > i) {
t = list[i]
list[i] = list[j]
list[j] = t
i++
j--
}
return list
}
复制代码
此方法有两个参数,插入位置的下标以及被插入的元素。spa
this.list[length] = this.list[length - 1]
// 插入
insert(index: number, item: any) {
let length = this.length
// 从最后一位依次移动元素至被插入下标前一位
for (let i = length; i > index; i--) {
this.list[i] = this.list[i - 1]
}
this.list[index] = item
this.length++
return true
}
复制代码
right
数组,小于基准值数放到left
数组right、left
数组,进行递归遍历排序left
+ 基准值
+ right
组成的数组quicksort(arys, ) {
const ary = arys.slice(0)
if (ary.length <= 1) {
return ary
}
// 基准值下标
let pivotIndex = Math.floor(ary.length / 2);
基准值
let pivot = ary.splice(pivotIndex, 1);
const left = [], right = [];
for (let i = 0; i < ary.length; i++) {
//当前元素大于基准值
if (ary[i] > pivot) {
right.push(ary[i])
} else {
left.push(ary[i])
}
}
return this.quicksort(left).concat(pivot, this.quicksort(right))
}
复制代码
欢迎你们进行指导留言,谢谢你们点赞鼓励支持。 指针