📙 插入排序习题
习题1
重写插入排序过程,使之按非升序排序。
查看代码
function insertionSort (originalArray) {
const array = [...originalArray]
let currentElement, preIndex
for (let i = 1; i < array.length; i++) {
preIndex = i - 1
currentElement = array[i]
while (preIndex >= 0 && currentElement > array[preIndex])) {
array[preIndex + 1] = array[preIndex--]
}
array[preIndex + 1] = currentElement
}
return array
}
习题2
考虑查找问题:
输入:n
个数的一个序列A = [a1, a2, a3, ..., an]
和一个值v
输出:下标i
使得v = A[i]
或者v
不在A
中出现时,输出null
写出线性查找的JavaScript实现。
查看代码
function linearSearch (array, search) {
for (let i = 0; i < array.length; i++) {
if (array[i] === search) {
return i
}
}
return null
}
习题3
考虑把两个n
位二进制整数加起来的问题,这两个整数分别存储在两个n
元数组A
和B
中。这两个整数的和应按二进制形式存储在一个(n + 1)
元的数组C
中,请给出该问题的形式化描述,并写出JavaScript实现。
查看答案
答案
形式化描述:
输入: A = [1, 1, 1, 1]
、B=[0, 0, 1, 1]
输出: C = [1, 1, 0, 1, 1]
友情提示:
查看代码
function addBinary (bin1, bin2) {
const length = bin1.length > bin2.length ? bin1.length : bin2.length
const bin = new Array(length + 1)
let carry = 0
let sum
let i
for (i = 0; i < length; i++) {
bin1[i] |= 0
bin2[i] |= 0
sum = bin1[i] + bin2[i] + carry
bin[i] = sum % 2
carry = Math.floor(sum / 2)
}
bin[i] = carry
return bin
}