zoukankan      html  css  js  c++  java
  • 插入排序的JavaScript实现

    思想

    每次在现有已经排好的数组的基础上排入一个新的数组项。

    • 先把第一项看做是已经排好的,第二项应该排在第一项之前还是之后呢?当前两项排好后,第三项应该排在这已排好的两项的之前还是之后还是中间呢?当前三项排好后,第四项应该排在这已排好的三项中的什么位置呢?...以此类推。
    • 在把新的一项排入已排好的数组项中时,将已排好的项从后往前依次与新的一项比较,如果比新的一项大,那么就依次往后挪一个位置...直到找到小于等于新的一项的数组项的位置,将新的一项排在该位置后面(由于后面的数组项都往后挪了一个位置,故这里刚好有一个空位置)即可。

    代码

    function insertionSort(arr) {
      const len = arr.length;
      for (let i = 1; i < len; i++) { //在arr[0,...,i-1]中插入arr[i]
        const toInsertValue = arr[i];
        let j;
        for (j = i; j >0 && arr[j-1] > toInsertValue; j--) { //找到一个比arr[i]大的项,就把这个项往后挪一项。因为最后一项就是toInsertValue,所以该值一直可以通过toInsertValue访问,故也不必另做保存。
          arr[j] = arr[j-1];
        }
        arr[j] = toInsertValue;//内循环结束得到的arr[j-1]是第一个比arr[i]小的值,那么就把arr[i]存储在此处的arr[j]上。而之前的arr[j]已经在上一轮循环中存储到了arr[j+1]中
        
      }
    }
    

    性能分析

    • 时间复杂度:最好O(n),平均、最坏O(n^2) (但是小型数组排序时,其性能要比冒泡和选择排序好)
    • 空间复杂度: O(1), 稳定

    延伸:对比C语音的插入排序

    #include<stdio.h>
    #include<stdlib.h>
    void insertion(int *list,int n)
    {
        int i,j,t;
        for(i=1;i<n;i++)//待插入的是list[1]到list[n-1]
        {
            if(list[i]<list[i-1])
            {
                t=list[i];
                list[i]=list[i-1];
                j=i;
                while(t<list[j-1]&&j>=1)
                {
                    list[j]=list[j-1];
                    j--;
                }
                list[j]=t;  
            }
        
        }
    }
    main()
    {
        int list[10],n=10,i;
    
        printf("请输入10个整数:
    ");
        for(i=0;i<10;i++)
        {
            scanf("%d",&list[i]);
        }
    
        insertion(list,10);
    
        for(i=0;i<10;i++)
        {
            printf("%d	",list[i]);
        }
    
    
        system("pause");
    }
    
  • 相关阅读:
    dedecms织梦建站总结
    ubuntu安装
    git命令
    关于测试日报
    Appium环境搭建(Windows版)
    jmeter,CSV数据加载、数据库连接、正则
    jmeter,参数、Bean Shell断言
    jmeter安装和组件说明
    造数据
    WEB UI自动化
  • 原文地址:https://www.cnblogs.com/Bonnie3449/p/9574549.html
Copyright © 2011-2022 走看看