js排序算法01——插入排序

鲁小肃      2022-02-16     144

关键词:

插入排序的思路是我们默认数组的第一个元素是有序的,从第二个元素开始依次和前面的元素比较,如果前面的元素大,就将前面的元素往后移一位,如果前面的元素小,就把该元素放在前面元素的后面。其实就和我们玩扑克牌差不多的,每次拿牌后,把大牌放后面,小牌放前面。按照这个思路,实现了如下代码:

function insertSort(arr){
    if(!Array.isArray(arr)){
        return false;          //类型判断
    }
    else{
        var result=[];                //定义一个新数组
        result.push(arr[0]);       //默认第一个为有序的
        for (var i = 1; i < arr.length; i++) {
            var lgh = result.length-1;
            for (var j = lgh; j >= 0; j--) {
                if(arr[i]<result[j]){
                    result[j+1] = result[j];
                }
                else{
                    break;
                }
            }
            result[j+1] = arr[i];
        }
        return result;
    }
}

实现了之后看到大佬的文章好像都没定义新的数组,感觉很厉害的样子,于是又优化了自己的代码,优化后的代码如下

function insertSort(arr){
    if(!Array.isArray(arr)){
        return false;          //类型判断
    }
    else{
        for (var i = 1; i < arr.length; i++) {
            var current = arr[i];
            var j = i-1;
            while(current<arr[j]&&j >= 0){
                arr[j+1] = arr[j];
                j--;
            }
            arr[j+1] = current;
        }
        return arr;
    }
}

算法分析:最好的情况(已经是顺序)时间复杂度为O(n),最坏的情况(逆序),时间复杂度为O(n2).

排序算法之java插入排序算法

packagenet.qh.test.sort;importjava.util.ArrayList;importjava.util.Calendar;importjava.util.List;/***CreatedbyAdministratoron2016/03/01.*/publicclassInsert{publicint[]sort(int[]arr){if(arr==null||arr.l 查看详情

排序算法(01)—三种简单排序(冒泡插入选择)(代码片段)

一、概述排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要我们手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现。但是了解这些精妙的思想对我们还是大有裨益的。1.1排序的... 查看详情

常用排序算法

...址有算法源码):http://www.cnblogs.com/liuling/p/2013-7-24-01.html排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。内排序:(1)、插入排... 查看详情

希尔排序shellsort算法详解java/go/python/js/c不同语言实现(代码片段)

【希尔排序算法详解】Java/Go/Python/JS/C不同语言实现 说明希尔排序(ShellSort)是插入排序的一种改进版,也称递减增量排序算法(DiminishingIncrementSort),其实质是将数列分组,然后再按插入算法分别排序,因DL.Shell于1959年提... 查看详情

总结:大厂面试常考手撕代码——javascript排序算法(冒泡排序选择排序插入排序快速排序)(代码片段)

文章目录1.冒泡排序2.选择排序3.插入排序4.快速排序1.冒泡排序//冒泡排序letarr=[2,4,1,6,3]functionbubbled(arr)for(leti=0;i<arr.length-1;i++)//【!!注意】这里不是j=i,因为回回都必须重头遍历,才能不漏一个... 查看详情

js数据结构与算法——插入排序(代码片段)

一、图解排序过程二、代码实现三、完整代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body><script>//创建列 查看详情

插入排序算法初学算法之排序--直接插入排序

...五分之一就已经收益良多,而前五分之一又大部分是关于排序,有冒泡排序、快速排序、堆排序、直接插入排序、希尔排序等等,理解起来也不算特别的难,今天就跟大家分享其中的一种——直接插入排序算法,这里我实... 查看详情

排序算法之插入排序(直接插入排序折半插入排序希尔排序)(代码片段)

排序算法之插入排序插入排序直接插入排序理论算法实现折半插入排序算法实现希尔排序概念算法实现后续插入排序在排序过程中,根据数据元素是否完全在内存中,可以将排序分成两类:内部排序:是指在排序... 查看详情

排序算法之直接插入排序

    排序算法分为很多种,其中插入排序算是最基础的排序算法了。插入排序包括直接插入排序,折半插入排序和希尔排序,这三种排序算法本质是一样的,但是在实际操作和实现的过程中有不同的辅助存储空间和... 查看详情

java算法--选择排序冒泡排序插入排序前缀和数组java中的math.random()函数01不等概率随机到01等概率随机从[1,5]随机到[1,7]随机对数器的使用(代码片段)

文章目录1.选择排序2.冒泡排序3.插入排序4.前缀和数组5.Java中的Math.random()函数,随机函数6.从[1,5]随机到[1,7]随机7.01不等概率随机到01等概率随机8.对数器的使用1.选择排序选择排序的Java代码如下:publicstaticvoidsel... 查看详情

常用排序算法直接插入排序

直接插入排序概要本章介绍排序算法中的直接插入排序。内容包括:1. 直接插入排序介绍2. 直接插入排序图文说明3. 直接插入排序的时间复杂度和稳定性4. 直接插入排序实现4.1 直接插入排序C实现4.2 直接插... 查看详情

排序算法-直接插入排序

插入排序包括:直接插入排序,二分插入排序(折半插入排序),链表插入排序,希尔排序。今天介绍的是直接插入排序。直接插入排序在要排序的一组数中,假设前面(n-1)[n>=2]个数已经是排好顺序的,现在要把第n个数插到前... 查看详情

排序算法之冒泡选择插入排序(java)(代码片段)

文章目录通过Java实现冒泡、选择、插入排序算法冒泡排序冒泡排序介绍和实现具体代码的实现选择排序选择排序介绍和实现选择排序图解具体代码实现插入排序插入排序介绍和实现插入排序图解具体代码实现通过Java实现冒泡、... 查看详情

八大内部排序算法之希尔堆排序插入排序算法(代码片段)

前言我们所知的八大内部的排序算法有冒泡排序、选择排序、快速排序、归并排序、链式基数排序、插入排序、希尔排序、堆排序、而这篇文章主要研究这其中的希尔排序和堆排序算法,之前的排序算法都在下面连接中介绍... 查看详情

排序算法之插入排序

  初识算法,甚是脑大!初识排序,甚是苦恼!不过真要铁了心,好好的看下去,想想这些排序并没有那么困难!  通过网上的学习和自己的理解,想对插入排序算法做一些总结,以加深对算法的理解。  直接插入排序(In... 查看详情

经典排序算法–插入排序insertionsort

经典排序算法–插入排序Insertionsort  插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到所有插入完成。 插入排序方法分直接插入排序和折半插入排序两种。这里仅仅介绍直接... 查看详情

《算法》插入排序

使用插入排序将乱序数组进行排序。  分析:插入排序的思想()     插入排序的时间复杂度。()     插入排序的稳定性。 插入排序的思想:  插入排序的思想就是将一个元素插入已经排序好的一组数据中... 查看详情

排序算法2--插入排序--折半插入排序

折半插入排序折半插入排序(binaryinsertionsort)是对插入排序算法的一种改进,所谓排序算法过程,就是不断的依次将元素插入前面已排好序的序列中。在将一个新元素插入已排好序的数组的过程中,寻找插入点时,将待插入区... 查看详情