C语言插入排序及其优化

devtools/2025/1/8 8:02:08/

插入排序算法详解

插入排序是一种简单直观的排序算法。它通过构建有序序列,将未排序部分的元素插入到已排序部分的正确位置,直到所有元素排序完成。下面是插入排序的关键点及其实现细节。


算法思想

  1. 从第二个元素(下标为 1)开始,假定左侧的子数组已排序。
  2. 将当前元素与已排序部分逐一比较,找到插入点。
  3. 将插入点后的元素依次后移,为当前元素腾出位置。
  4. 重复上述过程,直至所有元素排序完成。

直接插入法排序 

void insert_sort(int array[], int size) {for (int i = 1; i < size; i++) {int temp = array[i]; // 当前待插入的元素int j = i - 1;// 查找插入位置while (j >= 0 && temp < array[j]) {array[j + 1] = array[j]; // 元素后移j--;}array[j + 1] = temp; // 插入元素}
}

优化方法

插入排序的主要时间消耗来源于:

  1. 查找插入位置的比较操作。
  2. 元素后移的赋值操作。

可以通过以下方法进行优化:

二分插入法排序

#include <stdio.h>void insert_sort(int array[], int size) {for (int i = 1; i < size; i++) {int temp = array[i];int left = 0, right = i - 1;// 二分查找插入位置while (left <= right) {int mid = (left + right) / 2;if (array[mid] > temp)right = mid - 1;elseleft = mid + 1;}// 将大于 temp 的元素右移for (int j = i - 1; j >= left; j--) {array[j + 1] = array[j];}array[left] = temp; // 插入到正确位置}
}

时间复杂度分析

操作最好情况(数组已排序)最坏情况(数组逆序)平均情况
比较次数O(n)O(n)O(n)O(n2)O(n^2)O(n2)O(n2)O(n^2)O(n2)
移动次数O(n)O(n)O(n)O(n2)O(n^2)O(n2)O(n2)O(n^2)O(n2)

尽管插入排序在最坏情况下的复杂度是 O(n2)O(n^2)O(n2),但在以下情况下表现良好:

  1. 数据接近有序时,比较和移动次数大幅减少。
  2. 数据量较小时,插入排序的简单性使其执行速度不逊于复杂的排序算法

http://www.ppmy.cn/devtools/147314.html

相关文章

Python 向量检索库Faiss使用

Faiss&#xff08;Facebook AI Similarity Search&#xff09;是一个由 Facebook AI Research 开发的库&#xff0c;它专门用于高效地搜索和聚类大量向量。Faiss 能够在几毫秒内搜索数亿个向量&#xff0c;这使得它非常适合于实现近似最近邻&#xff08;ANN&#xff09;搜索&am…

Kubernetes第二天

1.pod运行一个容器 1.创建目录 mkdir -p /manifests/pod 2.编写pod资源清单文件 vim 01-myweb.yaml 说明&#xff1a; apiVersion:指的是Api的版本 metadata&#xff1a;资源的元数据 spec:用户期望的资源的运行状态 status&#xff1a;资源实际的运行状态 由于拉取远…

4种更快更简单实现Python数据可视化的方法

数据可视化是数据科学或机器学习项目中十分重要的一环。通常&#xff0c;你需要在项目初期进行探索性的数据分析&#xff08;EDA&#xff09;&#xff0c;从而对数据有一定的了解&#xff0c;而且创建可视化确实可以使分析的任务更清晰、更容易理解&#xff0c;特别是对于大规模…

2024年6月英语六级CET6写作与翻译笔记

目录 1 写作 1.1 数字素养和数字技能的重要性 1.2 独立自主学习 1.3 社会实践和学术学习同等重要 2 翻译 2.1 婚礼习俗(wedding customs) 2.2 扇子(Fans) 2.3 竹子(bamboo) 1 写作 1.1 数字素养和数字技能的重要性 1.2 独立自主学习 1.3 社会实践和学术学习同等重要 2…

【数据仓库】hadoop3.3.6 安装配置

文章目录 概述下载解压安装伪分布式模式配置hdfs配置hadoop-env.shssh免密登录模式设置初始化HDFS启动hdfs配置yarn启动yarn 概述 该文档是基于hadoop3.2.2版本升级到hadoop3.3.6版本&#xff0c;所以有些配置&#xff0c;是可以不用做的&#xff0c;下面仅记录新增操作&#…

【持续集成与持续部署(CI/CD)工具 - Jenkins】详解

持续集成与持续部署&#xff08;CI/CD&#xff09;工具 - Jenkins 一、持续集成与持续部署概述 &#xff08;一&#xff09;概念 持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff09;&#xff1a;是一种软件开发实践&#xff0c;要求开发团队成员频繁地将…

Java Map 集合详解:基础用法、常见实现类与高频面试题解析

在 Java 集合框架中&#xff0c;Map 是用于存储键值对&#xff08;Key-Value&#xff09;的重要接口&#xff0c;广泛应用于开发中的各种场景。本文将详细讲解 Map 的基础概念、常见实现类及其特性&#xff0c;并结合代码示例和高频面试问题&#xff0c;帮助你深入理解 Map 的用…

小程序租赁系统构建指南与市场机会分析

内容概要 在当今竞争激烈的市场环境中&#xff0c;小程序租赁系统正崭露头角&#xff0c;成为企业转型与创新的重要工具。通过这个系统&#xff0c;商户能够快速推出自己的小程序&#xff0c;无需从头开发&#xff0c;节省了大量时间和资金。让我们来看看这个系统的核心功能吧…