每天一点算法-直接插入排序-(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)

感谢阅读!欢迎关注!持续更新中...
相关文章
|
2月前
|
算法 搜索推荐 C#
|
3月前
|
机器学习/深度学习 算法 搜索推荐
数据结构算法--2 冒泡排序,选择排序,插入排序
**基础排序算法包括冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较交换,逐步将最大值“冒”到末尾,平均时间复杂度为O(n^2)。选择排序每次找到剩余部分的最小值与未排序部分的第一个元素交换,同样具有O(n^2)的时间复杂度。插入排序则类似玩牌,将新元素插入到已排序部分的正确位置,也是O(n^2)复杂度。这些算法适用于小规模或部分有序的数据。**
|
3月前
|
算法 搜索推荐
数据结构与算法-插入排序
数据结构与算法-插入排序
25 2
|
3月前
|
算法 搜索推荐 数据可视化
【漫画算法】插入排序:插入宝石的传说
【漫画算法】插入排序:插入宝石的传说
|
3月前
|
人工智能 搜索推荐 JavaScript
心得经验总结:排序算法:插入排序法(直接插入法和希尔排序法)
心得经验总结:排序算法:插入排序法(直接插入法和希尔排序法)
25 0
|
3月前
|
机器学习/深度学习 搜索推荐 算法
【C/排序算法】:直接插入排序和希尔排序
【C/排序算法】:直接插入排序和希尔排序
28 0
|
3月前
|
搜索推荐 算法
排序算法之插入排序
排序算法之插入排序
30 0
|
3月前
|
搜索推荐
排序算法---插入排序-----详解&&代码
排序算法---插入排序-----详解&&代码
|
3月前
|
人工智能 算法 C语言
数据结构与算法——简单排序-冒泡排序、插入排序,时间复杂度下界(图示、代码、时间复杂度、定理)
数据结构与算法——简单排序-冒泡排序、插入排序,时间复杂度下界(图示、代码、时间复杂度、定理)
31 0
|
4月前
|
存储 算法 搜索推荐
【数据结构与算法】:插入排序与希尔排序
欢迎大家来到初阶数据结构的最后一小节:排序
【数据结构与算法】:插入排序与希尔排序