из-заjsнетCУказатель языка, поэтому мы моделируем массив здесь, это просто идея моделирования работы массива.
Из-за моего ограниченного уровня, пожалуйста, поправляйте меня, похоже, можно указать лучше, спасибо.
сначала создайтеArrayList
Добрый.
class ArrayList {
list: any[]
length: number
constructor(list = []) {
this.list = list
this.length = list.length
}
}
Добавить (нажать)
Из обычного использования мы знаем, что массивpush
Метод состоит в том, чтобы добавить элемент в последний бит массива, и длина массива станетthis.length + 1
, индекс массива последней цифры массива равенthis.length
. Итак, наш новый метод можно записать так:
appendChild(item: any) {
this.list[this.length] = item
this.length++
}
удалить (указать индекс удаляемого элемента)
Предположим, что удаленный элемент индексируется какi
- Сначала найдите элемент, который нужно удалить
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
}
вставлять
Этот метод принимает два параметра: индекс позиции вставки и вставляемый элемент.
- получить длину массива
- Переместить элемент во вставленной позиции на одну позицию назад, начиная с последнего
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))
}
Добро пожаловать, чтобы оставить сообщение для руководства, спасибо за вашу поддержку.