算法笔记【7】-直接插入排序算法

本文详细介绍了直接插入排序算法,包括其工作原理、实现步骤,以及在最好和最坏情况下的时间复杂度。尽管对于大规模数据排序效率低,但作为基础算法,它对学习者有重要价值。

一、简介

在排序算法中,直接插入排序是一种基本而常用的排序方法。它通过不断将待排序数组中的元素插入到已排序部分的合适位置,逐步构建有序数组。本文将详细介绍直接插入排序算法的原理、实现步骤,并讨论其优缺点。

二、基本原理和实现步骤

直接插入排序算法的基本思想是将一个元素逐个地插入已经排好序的部分数组中,从而得到一个新的、长度更长的有序数组。具体而言,它从第二个元素开始遍历待排序数组,将当前元素与其前面的已排序部分进行比较,找到合适的位置并插入。
在这里插入图片描述

具体的,以数组[69,58,90,37,92,6,28,54]为例。直接插入排序算法的实现步骤如下

  • 从第二个元素开始遍历待排序数组。
  • 将当前元素与其前面的已排序部分进行比较,找到合适的插入位置。
  • 将当前元素插入到正确的位置,并依次后移其他元素。
  • 重复上述步骤,直到整个数组排序完成。

代码示例 以下是使用matlab编写的直接插入排序算法示例代码:

  • 直接插入排序函数
function sorted_array = insertionSort(arr)
    % 获取输入数组的长度
    n = length(arr);
    
    % 从第二个元素开始遍历数组
    for i = 2:n
        key = arr(i);  % 当前待插入的元素
        j = i - 1;
        
        % 将比key大的元素向后移动
        while (j >= 1) && (arr(j) > key)
            arr(j+1) = arr(j);
            j = j - 1;
        end
        
        % 插入key到正确的位置
        arr(j+1) = key;
    end
    
    sorted_array = arr;  % 返回已排序的数组
end
  • 调用
clc;
clear;
arr = [69,58,90,37,92,6,28,54];
%% 直接插入排序函数调用
sortedArr= insertionSort(arr);
disp("***********直接插入排序*****************************");
disp("排序前的数组:");
disp(arr);
disp("排序后的数组:");
disp(sortedArr);
  • 结果
    在这里插入图片描述

三、优缺点分析

优点:

  • 直接插入排序是一种稳定的排序算法,相同元素的相对位置不会改变。
  • 在最好情况下,即数组已经有序时,直接插入排序的时间复杂度为O(n),具有较高的效率。
  • 实现简单直观,适用于小规模数据的排序。

缺点:

  • 在最坏情况下,即数组逆序时,直接插入排序的时间复杂度为O(n^2),性能相对较低。

  • 不适用于大规模数据的排序,由于需要频繁地移动元素,性能较差。

  • 结论:
    直接插入排序算法虽然在面对大规模数据时性能相对较低,但它具有简单、直观的实现方式,对于初学者来说是理解和熟悉基本排序算法的良好起点。此外,直接插入排序在最好情况下具有较高的效率,并且是一种稳定的排序算法。了解直接插入排序算法的原理和特点,对于扩展知识面、深入理解排序算法的设计思想仍然是非常有价值的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

>_<!

码字不易,如有帮助,欢迎鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值