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

news/2024/10/18 14:17:12/

文章目录

    • 一、简介
    • 二、基本原理和实现步骤
    • 三、优缺点分析

一、简介

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

二、基本原理和实现步骤

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

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

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

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

  • 直接插入排序函数
function sorted_array = insertionSort(arr)% 获取输入数组的长度n = length(arr);% 从第二个元素开始遍历数组for i = 2:nkey = 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;endsorted_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),性能相对较低。

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

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


http://www.ppmy.cn/news/1185618.html

相关文章

【PC电脑windows-学习样例generic_gpio-ESP32的GPIO程序-基础样例学习】

【PC电脑windows-学习样例generic_gpio-ESP32的GPIO程序-基础样例学习】 1、概述2、实验环境3、 物品说明4、自我总结5、本次实验说明6、实验过程(1)复制目录到桌面(2)手动敲写(3)反复改错(4&am…

MyBatis-Plus 与 Druid 结合 Dynamic-datasource 实现多数据源操作数据库

MyBatis-Plus 官网:https://baomidou.com/ MyBatis-Plus 官方文档:https://baomidou.com/pages/24112f/ dynamic-datasource 文档(付费):https://www.kancloud.cn/tracy5546/dynamic-datasource/2264611 创建数据库…

2023年中国牙钻机优点、产量及市场规模分析[图]

牙钻机,又称为牙科钻机或牙科设备,是一种专用于牙科诊所和牙科医院的医疗设备。它被用来进行牙齿修复、治疗和牙科手术等操作。牙钻机通常由电动马达驱动,带有不同类型的钻头、磨头和其他附件,用于在牙齿上进行各种不同的操作&…

基于SpringBoot的工厂车间管理系统设计与实现

目录 前言 一、技术栈 二、系统功能介绍 管理员功能实现 人员管理 看板信息管理 设备信息管理 生产开立管理 人员功能实现 生产开立管理 生产工序管理 生产流程管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 社会发展日新月异,用计…

剑指offer --- 二维数组中的元素查找

目录 一、读懂题目 二、思路分析 三、代码呈现 总结 一、读懂题目 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的个二维数组和一个整数&#…

Golang Web3钱包开发指南

简介 以太坊(Ethereum)是目前最受欢迎的区块链平台之一,它提供了智能合约功能和去中心化应用(DApps)的开发能力。在以太坊生态系统中,Web3钱包扮演着关键角色,允许用户管理账户和密钥、发送交易…

如何将SAP数据集成到任意云平台

十年前就在使用SAP的客户询问我当时突然出现的新事物:大数据。五年前,变成了数据湖和机器学习。现在一切都是关于数据集成,当然还有人工智能。有时处理数据的基本方法已经改变或者发展。有时只是名字的改变。例如,在过去十年中&am…

【Python机器学习】零基础掌握AdditiveChi2Sampler内核近似特征

如何在海量数据中快速且准确地进行分类? 考虑到现今互联网用户生成的大量图像数据,以图像识别为例。想象一个电子商务平台,需要根据商品图片自动对商品进行分类。由于数据量巨大,传统的方法可能会运算缓慢。这时,如何有效地提高分类速度和准确度成了一个关键问题。 解决…