每天一点算法-直接插入排序-(Day5)

简介: 每天一点算法-直接插入排序-(Day5)

介绍

前面介绍的冒泡排序快速排序属于排序算法中的交换排序。今天介绍的直接插入排序则属于插入排序,算法核心是从待排序数据中对比后加入有序数据直到所有数据都在待排序数据。算法逻辑(升序为例):

1.以第一个数为第一轮的有序数组;

2.将第二个数以第一个数对比,大的放在后面,小的放前面,组成第2轮的有序数组;

3.以此类推,第n个数与第n-1轮的有序数组中的数据对比,遍历第n轮的有序数组,知道找到大于第n个数据的数,插入到这个数的前面;直到待排序数组为空;

直接插入排序

例子

假设有一个待排序数组[77, 6, 37, 96, 34, 6, 14], js实现如下(升序):

function sort(arr){
    let result = [arr[0]];
    for(let i = 1; i < arr.length; i++ ){
        for(let j = 0; j < result.length; j++){
            // 当待排序数小于排序数组的某个值时,插到这个数前面
            if(arr[i] <= result[j]){
                result.splice(j, 0, arr[i]);
                break;
             // 对比到有序数组的最后一个数据时扔没有小于的则直接放到后面
            }else if(j === result.length - 1){
                result.push(arr[i]);
                break;
            }
        }
    }
    return result;
}
sort([77, 6, 37, 96, 34, 6, 14]); // =>[6, 6, 14, 34, 37, 77, 96]

时间复杂度

遍历次数的计算与冒泡排序类似n-1 + n-2 + … + 2 + 1 = n * (n-1) / 2 = 0.5 * n ^ 2 - 0.5 * n,所以时间复杂度为O(n^2)

感谢阅读!欢迎关注!持续更新中...
相关文章
|
14小时前
|
算法 前端开发 搜索推荐
前端算法之插入排序
前端算法之插入排序
11 0
|
14小时前
|
搜索推荐 算法 Java
sort-05-insert sort 插入排序算法详解
这是一个关于排序算法的系列文章总结,包括冒泡排序、快速排序、选择排序、堆排序、插入排序等10种排序算法的详细讲解和Java实现。插入排序是一种简单直观的排序算法,通过构建有序序列并逐个插入新元素来排序。提供的Java代码展示了插入排序的实现过程,并附有测试示例。所有算法已开源在GitHub项目[https://github.com/houbb/sort](https://github.com/houbb/sort)中。
|
14小时前
|
人工智能 算法 搜索推荐
直接插入排序、希尔排序、直接选择排序、堆排序、冒泡排序——“数据结构与算法”
直接插入排序、希尔排序、直接选择排序、堆排序、冒泡排序——“数据结构与算法”
|
14小时前
|
人工智能 搜索推荐 Shell
【排序算法】插入排序与希尔排序,你不想知道为什么希尔比插入更快吗?
【排序算法】插入排序与希尔排序,你不想知道为什么希尔比插入更快吗?
|
14小时前
|
搜索推荐 算法 Shell
【数据结构与算法】直接插入排序和希尔排序
【数据结构与算法】直接插入排序和希尔排序
|
14小时前
|
机器学习/深度学习 搜索推荐 算法
【排序算法】插入排序与选择排序详解
【排序算法】插入排序与选择排序详解
|
14小时前
|
存储 算法 搜索推荐
【数据结构与算法】:插入排序与希尔排序
欢迎大家来到初阶数据结构的最后一小节:排序
【数据结构与算法】:插入排序与希尔排序
|
14小时前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--插入排序
数据结构与算法(Java篇)笔记--插入排序
|
14小时前
|
搜索推荐 JavaScript
NodeJS实现插入排序算法
NodeJS实现插入排序算法
14 1
|
14小时前
|
搜索推荐 Python
Python实现插入排序算法
Python实现插入排序算法
10 1

热门文章

最新文章