• 插入排序


    插入排序的基本思想:首先选取数组的第一项即a[0],我们可以认为这个数是已经排好序的,再取a[1]项插入到已经排好序的元素中,此时只有a[0],所以我们需要比较a[1]和a[0]的大小。如果a[1]<a[0],则需要把a[1]先用一个临时变量temp保存,a[0]往后挪一位(即a[1]的位置),然后把temp赋值给a[0]。要插入的元素依次为a[1]-a[a.length-1]项,插入每一项时,都需要从后往前遍历已排好序的元素,如果已排好序的元素比要插入的元素大,则把该元素往后挪一位,直到已排好的元素小于等于要插入的元素(或者已经遍历完了已排好序的数组项),则把要插入的元素放入该位置+1的索引中(或者放在数组的第0个位置)。对每个插入项都执行上面的操作,则最后的数组就排好序了。

     function insertSort(arr){
            var temp=null;//定义一个临时变量保存要插入元素的值
            for(var i=1; i<arr.length; i++){//从索引位置1开始遍历数组
                if(arr[i]<arr[i-1]){//只有要插入的元素小于已排好序的最大元素的时候才需要进行下面的操作
                    temp=arr[i];//把要插入的元素赋给一个临时变量
                    var p=i-1;//已排好序的数组的最后一项索引为i-1
                    while(temp<arr[p] && p>=0){//如果要插入的元素小于已排好序的元素并且没有到已排好数组的开始位置
                        arr[p+1]=arr[p];//把大于要插入元素(temp)的已排好序元素位置往后挪一位
                        p--;//从后往前便利已经排好序的元素
                    }
                    arr[p+1]=temp;//把要插入的元素插入到已排好序的数组中,索引位置为p+1
                }        
            }
            return arr;//返回已排好序的数组
        }
  • 相关阅读:
    网络通信过程
    路由表转发分析实例
    随机生成MAC地址和IP地址
    zabbix监控LAMP全教程
    linux ssh利用公钥免密登陆
    如果Mysql插入字符始终乱码怎么办?
    Windows 桌面利用 Navicat等工具连接 虚拟机Mysql
    pagefile.sys 虚拟内存
    linux常用命令---------------find
    当你使用Pycharm编译程序的时候,遇到了这个问题,该怎么办?please select a valid interpreter
  • 原文地址:https://www.cnblogs.com/jgwz/p/6477666.html
Copyright © 2020-2023  润新知