排序算法-插入排序(javascript)

思想:每一趟将一个记录插入到已经排好序的一组记录的适当位置上,知道所有待排序记录都插入为止。

function insertSort(arr){
    for(var i=2;i<=arr.length;i++){
        if(arr[i]<arr[i-1]){ //小于时插入
            arr[0]=arr[i];   //将待插入的记录暂存到监视哨
            arr[i]=arr[i-1]; //arr[i-1]后移
            for(var j=i-2;arr[0]<arr[j];--j){ //从后往前寻找插入位置
                arr[j+1]=arr[j];   //记录逐个后移,知道找到插入位置
            }
            arr[j+1]=arr[0]; //将arr[0]即原arr[i]插入正确位置
        }
    }
    return arr;
}

时间复杂度:

排序的基本操作为:比较两个关键字和移动。最好的情况:正序。比较1次,不移动。最坏情况:逆序。比较i次(i-1加哨兵),移动i+1次(i-1加将待插入的移到监视哨加从监视哨移出)。对于整个排序过程:最好情况下,比较次数n-1,不移动。最坏n^2/2次,n^2/2次。因此时间复杂度为O(n^2)

空间复杂度:

只需要一个记录的辅助空间arr[0],所以空间复杂度为O(1)。

算法特点:

1.稳定排序。

2.简便易实现。

3.也适用于链式存储结构。

4.更适合初始记录基本有序的情况。初始记录无序,n较大时,时间复杂度较高,不适用。

时间: 2024-08-03 06:59:32

排序算法-插入排序(javascript)的相关文章

经典排序算法 – 插入排序Insertion sort

经典排序算法 – 插入排序Insertion sort  插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕. 插入排序方法分直接插入排序和折半插入排序两种,这里只介绍直接插入排序,折半插入排序留到“查找”内容中进行.   图1演示了对4个元素进行直接插入排序的过程,共需要(a),(b),(c)三次插入. 以下代码仅供参考,欢迎指正 /// <summary> /// 插入排序 /// </summary> /// <param na

排序算法 基于Javascript

写在前面 个人感觉:javascript对类似排序查找这样的功能已经有了很好的封装,以致于当我们想对数组排序的时候只需要调用arr.sort()方法,而查找数组元素也只需要调用indexOf()方法或lastIndexOf()方法,我们忽略了其内部的实现.而今,js能开发的项目越来越庞大,对性能和效率要求也越来越高,虽然众多的库和框架也可以帮我们应付这些问题,但小编觉得框架过眼云烟,把握程序开发的基础,才能在飞速的更新换代中应对自如.因此我们不妨也研究一下这些算法,其中的思路有助于我们自身的提高

转载部长一篇大作:常用排序算法之JavaScript实现

注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang1724/p/3946339.html#3037096.O(∩_∩)O~  知识产权归部长原文所有. 笔试面试经常涉及各种算法,本文简要介绍常用的一些算法,并用JavaScript实现. 1.插入排序 1)算法简介 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫

常用排序算法之JavaScript实现

1.插入排序 1)算法简介 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间. 2)算法描述和实现 一般来说,插入排序都采用in-place在数组上实现.具体算法描述如下: 从第一个元素开始,该元素可以认为已

六种排序算法的JavaScript实现

本文将介绍数据排序的基本算法和高级算法.这些算法都只依赖数组来存储数据. 数组测试平台 首先我们构造一个数组测试平台类 function CArray(numElements) { this.dataStore = []; this.numElements = numElements; this.toString = toString; this.clear = clear; this.setData = setData; this.swap = swap; } function setData

十大经典排序算法(Javascript版)

1 冒泡排序 时间复杂度 O(n²) .额外空间复杂度O(1). 1)算法步骤 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数. 针对所有的元素重复以上的步骤,除了最后一个. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. 2)动图演示 3)什么时候最快 当输入的数据已经是正序时,时间复杂度 O(n) . 4)什么时候最慢 当输入的数据是反序时,时间复杂度 O(n²) 

PHP之八大排序算法--插入排序(-)直接插入排序

直接插入排序: 插入排序是最简单的排序算法之一,对于有N个元素的序列,插入排序由N-1趟排序组成.它的工作原理是通过构建有序序列,对于未排序的数据,在已经排序序列中从后向前扫描,找到相应位置插入. 插入排序算法步骤: 将第一个待排序的序列的第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列. 从头到尾一次扫描未排序的序列,将扫描到的每个元素插入有序序列的适当位置(在这里需要注意一个问题,如果在有序序列中有一个和待插入的元素相等,则将待插入的元素查到此元素的后面,这样方式的插入

排序算法 插入排序(直接插入排序、半插入排序、希尔排序)

一.直接插入排序. 1.介绍. 直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列.例如,已知待排序的一组记录是:60,71,49,11,24,3,66.假设在排序过程中,前3个记录已按关键码值递增的次序重新排列,构成一个有序序列:49,60,71.将待排序记录中的第4个记录(即11)插入上述有序序列,以得到一个新的含4个记录的有序序列.首先,应找到11的插入位置,再进行插入.可以

数据结构和算法-排序算法-插入排序

##################    插入排序        #################### """ 插入算法: alist = [54,26,93,17,77,31,44,55,20] 还是把序列分为两部分, 一开始就把第一个数字认为是有序的, alist = [54, 26,93,17,77,31,44,55,20] 第一轮, 把第二部分的和第一部分的最后一个做比较,如果小就交换, alist = [26,54 93,17,77,31,44,55,20]

选择排序---直接选择排序算法(Javascript版)

在要排序的一组数列中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. function sort(elements){ for(i = 0; i < elements.length; i++){ //将当前位置作为关键位置(最小位置) var key = i; //找出剩余的数列中最小值的位置作为关键位置 for(var j = i + 1; j <