📙 插入排序习题

习题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元数组AB中。这两个整数的和应按二进制形式存储在一个(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
}