【算法】- 插入排序

198 阅读2分钟

插入排序(Insertion sort)是一种简单直观且稳定的排序算法。如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法

原理

把待排序的序列关键key值插入到已排序的序列中,直到所有的都插入完毕。

算法思路

直接插入排序的算法思路:

  • (1) 设置监视哨r[0],将待插入记录的值赋值给r[0];
  • (2) 设置开始查找的位置j;
  • (3) 在数组中进行搜索,搜索中将第j个记录后移,直至r[0].key≥r[j].key为止;
  • (4) 将r[0]插入r[j+1]的位置上。

JavaScript 实现

    function insertSort(arr,tp){
        if(!arr.length)  throw error  'please input array '
        if(arr.length<2) return arr;
        let tmp = r[0];
        r[0] = tp;
        let len = arr.length;
         for (let i = 1; i < arr.length; i++) {
            for (let j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
                let temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
         return arr;
        
    }

关键码是数据元素中某个数据项的值,用它可以标示一个数据元素。通常会用记录来标示数据元素,一个记录可以有若干数据项组成。例如,一个学生的信息就是一条记录,它包括学号,姓名,性别等若干数据项。主关键码可以唯一的标示一个记录的关键码,如学号。次关键码是可以标示若干记录的关键字,如性别、姓名。

内部排序和外部排序

根据排序过程中涉及的存储器不同,可以将排序方法分为两大类:一类是内部排序,指的是待排序的几率存放在计算机随机存储器中进行的排序过程;另一类的外部排序,指的是排序中要对外存储器进行访问的排序过程。 内部排序是排序的基础,在内部排序中,根据排序过程中所依据的原则可以将它们分为5类:插入排序、交换排序、选择排序、归并排序和基数排序;根据排序过程的时间复杂度来分,可以分为三类:简单排序、先进排序、基数排序。

分类

包括:直接插入排序,二分插入排序(又称折半插入排序),链表插入排序。属于稳定排序的一种(通俗地讲,就是两个相等的数不会交换位置) 。