冒泡排序

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>冒泡排序</title>
</head>
<body>
</body>
<script>
  function swap(array, a, b) {
    /* const temp = array[a];
    array[a] = array[b];
    array[b] = temp; */ // 经典方式
    [array[a], array[b]] = [array[b], array[a]]; // ES2015的方式
  }
  function defaultCompare(a,b) {
    return a < b ? 0 : 1
  }
  function bubbleSort(array, compareFn = defaultCompare) {
  const { length } = array; // {1}
  for (let i = 0; i < length; i++) { // {2}
    for (let j = 0; j < length - 1; j++) { // {3}
      debugger;
      if (compareFn(array[j], array[j + 1]) === 1) { // {4}
        swap(array, j, j + 1); // {5}
      }
    }
  }
  return array;
}
  function createNonSortedArray(size) { // {6}
  const array = [];
  for (let i = size; i > 0; i--) {
    array.push(i);
  }
  return array;
}

let array = createNonSortedArray(5); // {7}
console.log(array.join()); // {8}
array = bubbleSort(array); // {9}
console.log(array.join()); //{10}
</script>
</html>

 

外层循环从第一次循环到最后一次,比如 [5, 4, 3, 2, 1] 这个数组我们循环了五次

for (let i = 0; i < length; i++) { // {2}

循环了五次

内循环将从第一位迭代至倒数第二位,内循环实际上进行当前项和下一项的比较(行{4})。如果这两项顺序不对(当前项比下一项大),则交换它们(行{5}),意思是位置为j+1的值将会被换置到位置j处,反之亦然。

for (let j = 0; j < length - 1; j++) { 

对比函数:

 function defaultCompare(a,b) {
    return a < b ? 0 : 1
  }

如果a小于b 就返回 数值 0,a大于b 就返回数据 1  ,当返回数据1  的时候我们进行数值交换 

 

 function swap(array, a, b) {
    /* const temp = array[a];
    array[a] = array[b];
    array[b] = temp; */ // 经典方式
    [array[a], array[b]] = [array[b], array[a]]; // ES2015的方式
  }

将 a,b 的位置交换

面的示意图展示了冒泡排序的工作过程。

 

 

posted @ 2019-10-19 22:55  1点  阅读(151)  评论(0编辑  收藏  举报