合并排序

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>
  function merge(A, p, q, r) {
    let A1 = A.slice(p, q)
    let B1 = A.slice(q, r)
    A1.push(Number.MAX_SAFE_INTEGER)
    B1.push(Number.MAX_SAFE_INTEGER)

    for (let k = p, i = 0, j = 0; k < r; k++) {
      A[k] = A1[i] < B1[j] ? A1[i++] : B1[j++]
      console.log(A)
    }
  }
  const B = [2, 4, 6, 1, 3, 5]
  merge(B, 1, 3, 5)
  // console.log(B)
</script>

</html>

[1,3,5,2,4,6]


=====>

(1)
拆分
A1 [1,3,5]
B1 [2,4,6]

(2)循环

1.k=0,i=0;j=0;
A【0】 = A1[0] < B1[0] 的判断结果为

A[0] = A1[0] = 1,i+1=1

得到数组

A[1,3,5,2,4,6]

2.k=1;i=1;j=0

A【1】 = A1[1] < B1[0] 的判断结果为

A[1] = B1[0] = 2

得到数组

A[1,2,5,2,4,6] j+1=1

3.k=2;i=1;j=1


A【2】 = A1[1] < B1[1] 的判断结果为

A[1] = A[1] = 3

得到数组

A[1,2,3,2,4,6] i+1=2


3.k=3;i=2;j=1


A【3】 = A1[2] < B1[1] 的判断结果为

A[3] = B[1] = 4

得到数组

A[1,2,3,4,4,6] j+1=2


4.k=3;i=2;j=2


A【4】 = A1[2] < B1[2] 的判断结果为

A[4] = B[2] = 5

得到数组

A[1,2,3,4,5,6] i+1=3

4.k=4;i=3;j=2


A【5】 = A1[3] < B1[2] 的判断结果为

A[5] = B[2] = 6

得到数组

A[1,2,3,4,5,6] j+1=3

5.k=6 跳出循环

A[1,2,3,4,5,6]

原文地址:https://www.cnblogs.com/guangzhou11/p/12439048.html