zoukankan      html  css  js  c++  java
  • 插入排序-直接插入排序、希尔排序

    插入排序是一类借助'插入'进行排序的算法,主要思想:每次将一个待排序的记录按其关键码大小插入到一个已经排好序的有序序列中,直到全部记录排好序。

    一、直接插入排序

    直接插入排序是插入排序最简单的算法,类似于玩纸牌时整理手中纸牌的过程。基本思想:依次将待排序序列中的每一个记录插入到一个已经排好序的序列中,直到全部记录都排好。代码如下:

    /*插入排序*/
    function sort(arr) {
        var len=arr.length,temp=0,i,j;
        arr.unshift(temp);
        for(i=2;i<=len;i++){
             arr[0]=arr[i];
             for(j=i-1;arr[0]<arr[j];j--){
                  arr[j+1]=arr[j];
             }
    
             /*j=i-1;
             while(arr[0]<arr[j]){
                  arr[j+1]=arr[j]; 
                  j--;                     
             }*/
            
             arr[j+1]=arr[0];                        
        }
        arr.shift(arr[0]);
        return arr;
    }
    console.log(sort([5, 100, 6, 3, -12]));

    效率:

    时间复杂度:最好:O(n),最坏:O(n^2),平均:O(n^2)。

    空间复杂度:O(1)。

    稳定性:稳定

    直接插入排序算法简单,容易实现,当序列中的记录基本有序或者待排序记录较少时,它是最佳的排序方法。但是,当待排序的记录个数较多时,大量的比较和移动操作使得效率很低。

    二、希尔排序

    希尔排序是对直接插入排序的改进,基本思想:先将整个待排序记录序列分割成若干个子序列,在子序列内分别进行直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序。代码如下:

     1 function shellSort(arr){
     2     var length=arr.length;
     3     var temp,d;
     4     for(d=Math.floor(length/2);d>=1;d=Math.floor(d/2)){//以增量d进行直接插入排序
     5         for(var i=d;i<length;i++){
     6             temp=arr[i];//暂存被插入的记录
     7             for(var j=i-d;j>=0&&temp<arr[j];j=j-d){
     8                 arr[j+d]=arr[j];//记录后移d个位置
     9             }
    10             arr[j+d]=temp;
    11         }
    12     }    
    13     return arr;
    14 }
    15 shellSort([59,20,17,36,98,14,23,83,13,28]);

    效率:

    时间复杂度:最好:O(nlog2n)~O(n^2),最坏:O(n^1.3),平均:O(n^2)。

    空间复杂度:O(1)。

    稳定性:不稳定

  • 相关阅读:
    htnl5中设置文本单行显示,超出部分打省略号,鼠标移到文本时alt出全部文本内容
    sql 查出一张表中重复的所有记录数据
    JS实现关闭当前子窗口,刷新父窗口
    jstl <c:forEach> 介绍
    Oracle SQL: TO_CHAR and TO_NUMBER 笔记
    Python学习记录七---继承、多态和封装
    iOS动画和第三方插件学习网址
    Python学习记录(六)--函数 定义和使用
    python学习记录(五) --语句块和比较符
    Python学习记录(四)--字典
  • 原文地址:https://www.cnblogs.com/Iona/p/4734506.html
Copyright © 2011-2022 走看看