插入排序及其时间复杂度(JavaScript实现)

1. 插入排序基本原理

将一个无序序列,分成两部分,一部分是已排序序列,另一部分是未排序序列。
然后将未排序序列第一个元素看作是待排序序列,把未排序序列第二个元素到最后一个元素当成是未排序序列。把待排序序列从头依次扫描已排序序列元素,直到找到比自身小的元素,然后插入在比自身小的元素后面。

2. 动图演示

假设对n个元素进行插入排序,则需要进行n-1趟排序。
在这里插入图片描述

3.伪代码

for i ← 0 to n
>         key ← num[i]
>         j ← i – 1
> 		  
>         while j >= 0 && num[j] > key do
>             num[j + 1] ← num[j]
>             j--
>         end
> 
>         num[j + 1] ← key;
>     end

输入:有n个元素的乱序数组num
输出:有序的数组num

4. JavaScript实现

window.onload = function()
        {
           
            var num = new Array(4, 51, 23, 32, 42, 65, 12, 6, 26);
            var key, i, j;
            //i元素之前的元素都是已排序序列,i是待排序序列
            for(i = 0; i < num.length; i++){
                key = num[i];   //拿出待排序序列
                j = i - 1;

                    //和已排序序列对比
                while(j >=0 && num[j] > key){
                    //把以排序序列向后移动一位
                    num[j + 1] = num[j];
                    j--;
                }
                //当已排序序列比待排序序列小
                //插入在后面
                num[j + 1] = key;
            }
            num.forEach(i => {  //输出数组
                console.log(i);
            });
        }

5.时间复杂度

该算法基本运算规则:j >=0 && num[j] > key

最好时间复杂度

当输入数组是顺序有序的(1,2,3,4……),for执行n次,内嵌循环while则一次都不执行。这种情况下时间复杂度也就是o(n)

最坏时间复杂度

当输入的数组是以逆序有序的(10,9,8……),在这种情况下,每一次最外层的for执行一次,内层while循环要一直执行到j = 0,也就是(j←I – 1)一直减1,到0才停止执行,执行了 I – 1次。也就是在逆序情况下,内嵌循环要把每一种结果对比一遍。时间复杂度也就是o(n²)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值