zoukankan      html  css  js  c++  java
  • 插入排序

    什么是插入排序

    什么是插入排序?想到插入我脑子里冒出来一个相近的词就是插队,我那时还在上大二,排在食堂一楼打饭,忽然来了一个没素质的一顿操作猛如虎地插到了我前面,唉,这人没救了!我当时就在想能不能用插入排序来描述这件事,后来发现不行,也就是说插队不是插入排序生活中的体现。我想到一个更为恰当的例子,那就是打扑克打双扣,有经验的选手他往往是这样的,右手抓到一张牌放入左手,然后右手再去抓一张牌去跟左手的牌作对比,如果比它小就放前面,比它大就放后面,重复楼上的动作,直到这位选手抓完27张牌后,他的左手应该握有一把美丽的扇子。好的,在理解完插入排序生活中的例子后,我们开始给它下个定义:

    给定一组数据集,遍历这组数据集,每次拿当前遍历的元素与其前面元素的有序数据集的元素进行比较,将其插入相应的位置,我们将这种排序算法称之为“插入排序”。

    实现一个插入排序

    思路

    大致是这样子,在已给定的数据集中,我们先拿第一个和第二个元素比大小排序,之后进行第二次循环,我们将第三个元素与已经排好序的第一个和第二个数据集中的元素进行比大小,将其插入合适位置,重复这个行为直至遍历到最后一个元素,至此,排序完成。

    code

    export default (arr) => {
      for (let i = 1; i < arr.length; i++) {
        for (let j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
          [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
        }
      }
      return arr;
    }
    

    test

    test case

    import insertSort from '../src/insert';
    
    
    test('insert sort: test case 1', () => {
      expect(insertSort([2, 4, 3, 1])).toEqual([1, 2, 3, 4]);
    });
    
    test('insert sort: test case 2', () => {
      expect(insertSort([2, 0, 2, 0])).toEqual([0, 0, 2, 2]);
    });
    
    test('insert sort: test case 3', () => {
      expect(insertSort([1, 9, 9, 7])).toEqual([1, 7, 9, 9]);
    });
    
    test('insert sort: test case 4', () => {
      expect(insertSort([0, 6, 1, 3])).toEqual([0, 1, 3, 6]);
    });
    

    test result

    PS E:document
    eposJavaScript-Tsukukicodesort-study> npm run test:insert
    
    > sort-study@1.0.0 test:insert E:document
    eposJavaScript-Tsukukicodesort-study
    > jest test/insert.test.js
    
     PASS  test/insert.test.js
      √ insert sort: test case 1 (5 ms)
      √ insert sort: test case 2
      √ insert sort: test case 3
      √ insert sort: test case 4
    
    Test Suites: 1 passed, 1 total
    Tests:       4 passed, 4 total
    Snapshots:   0 total
    Time:        7.645 s, estimated 22 s
    Ran all test suites matching /test\insert.test.js/i.
    PS E:document
    eposJavaScript-Tsukukicodesort-study> 
    

    最后

    本文选自Javascript筑基专题文章,项目地址:https://github.com/ataola/JavaScript-Tsukuki

    知识共享许可协议
    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

  • 相关阅读:
    用pelican搭建完美博客
    对比MySQL,什么场景MongoDB更适用
    客官,您的 Flask 全家桶请收好
    虚拟机安装macos 分辨率不正常修改不了,不能全屏如何解决
    mac开启HiDPI
    虚拟机安装MacOS|unlocker解锁出现闪退问题!
    下载com.vmware.fusion.tools.darwin.zip.tar慢
    VMware虚拟机安装黑苹果MacOS Mojave系统详细教程
    Python格式化输出
    ubuntu进入initramfs,系统黑屏
  • 原文地址:https://www.cnblogs.com/cnroadbridge/p/13599518.html
Copyright © 2011-2022 走看看