数据结构(8.2_1)——插入排序

插入排序

算法思想:每次将一个待排序的记录按其关键字大小插入到前面已排序好的子序列中,直到全部记录插入完成。

代码实现 

#include <stdio.h>

void InsertSort(int A[], int n) {
	int i, j.temp;
	for (i = 1; i < n; i++) {//将各元素插入已排好序的序列中
		if (A[i] < A[i - 1]) {//若A[i]关键字小于前驱
			temp = A[i];//用temp暂存A[i]
			for (j = i - 1; j >= 0 && A[j] > temp; --j)//检查所有前面已排好序的元素
				A[j + 1] = A[j];//所有大于temp的元素都向后挪
			A[j + 1] = temp;//复制到插入位置
	}
}

 

代码实现 (带哨兵) 

#include <stdio.h>

void InsertSort(int A[], int n) {
	int i, j;
	for (i = 2; i <= n; i++) {//依次将A[2]~A[n]插入到前面已排序序列
		if (A[i] < A[i - 1]) {//若A[i]关键字小于其前驱,将A[i]插入有序表
			A[0]=A[i]//复制为哨兵,A[0]不存放元素
			for (j = i - 1; A[0]<A[j]; --j)//从后往前查找待插入位置
				A[j + 1] = A[j];//向后挪
			A[j + 1] = A[0];//复制到插入位置
	}
}

 

 

 

算法效率分析 

空间复杂度:O(1)

时间复杂度:主要来自对比关键字,移动元素,若有n个元素,则需要n-1趟处理

最好情况:共n-1趟处理,每一趟只需要对比关键字1次,不用移动元素———O(n)

最坏情况:

第1趟:对比关键字2次,移动元素3次

第2趟:对比关键字3次,移动元素4次

...

第i趟:对比关键字i+1次,移动元素i+2次———O(n^2)

平均时间复杂度:O(n^2) 

优化——折半插入排序

思路:先用折半查找找到应该插入的位置,再移动元素

先将low指针和high指针相加除二得出mid指针

对比关键字key和数组[mid]哪个大

若数组[mid]>key,则low=mid+1;

若数组[mid]<key,则high=mid-1;

当high<low时,折半查找停止,将[low,i-1]内的元素全部右移,并将A[0]复制到low所指位置

注意:  折半查找只能用于顺序列表

 

 

 

代码实现 

	void InsertSort(int A[], int n) {
		int i, j,low.high.mid
		for (i = 2; i <= n; i++) {//依次将A[2]~A[n]插入到前面已排序序列
			A[0] = A[i];//将A[i]暂存到A[0]
			low = 1; high = i - 1;//设置折半查找的范围
			while (low <= high) {//折半查找(默认递增有序)
				mid = (low + high) / 2;//取中间点
				if (A[mid] > A[0])
					hith = mid - 1;//查找左半子表
				else
					low = mid - 1;//查找右半子表
		}
			for (j = i - 1; A[0] < A[j]; --j)//从后往前查找待插入位置
				A[j + 1] = A[j];//向后挪
			A[j + 1] = A[0];//复制到插入位置
			}
		}

对链表进行插入排序 

总结:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/893357.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

集成电路公司进销存系统生成合同——未来之窗行业应用跨平台架构

一、进销存生成合同优势 1. 提高效率&#xff1a;节省了手动起草和编辑合同的时间&#xff0c;能够快速生成合同&#xff0c;加快业务流程。 2. 减少错误&#xff1a;避免了人工输入可能导致的拼写、数据错误等&#xff0c;提高合同的准确性和规范性。 3. 数据一致性&#xff…

【从零开始的LeetCode-算法】504. 七进制数

给定一个整数 num&#xff0c;将其转化为 7 进制&#xff0c;并以字符串形式输出。 示例 1: 输入: num 100 输出: "202"示例 2: 输入: num -7 输出: "-10"提示&#xff1a; -107 < num < 107 我的解答 class Solution {public String convertT…

排序---java---黑马

排序算法 名称平均时间复杂度最好情况最坏情况空间复杂度稳定性冒泡排序 O ( n 2 ) O(n^2) O(n2) O ( n ) O(n) O(n) O ( n 2 ) O(n^2) O(n2) O ( 1 ) O(1) O(1) Y Y Y选择排序 O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) O ( 1 ) O(1) O(1) N N …

【状态机DP】【记忆化搜索及翻译递推】【空间优化】力扣3290. 最高乘法得分

给你一个大小为 4 的整数数组 a 和一个大小 至少为 4 的整数数组 b。 你需要从数组 b 中选择四个下标 i0, i1, i2, 和 i3&#xff0c;并满足 i0 < i1 < i2 < i3。你的得分将是 a[0] * b[i0] a[1] * b[i1] a[2] * b[i2] a[3] * b[i3] 的值。 返回你能够获得的 最大…

学习Redisson实现分布式锁

官网&#xff1a;https://redisson.org/ 官方文档&#xff1a;https://redisson.org/docs/getting-started/ 官方中文文档&#xff1a;https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95 1、引入依赖 <!--redisson--> <dependency><groupId>or…

如何使用FastAPI开发Serverless应用?

使用FastAPI开发Serverless应用是一种现代且高效的方法&#xff0c;它结合了FastAPI的高性能和Serverless架构的灵活性、可扩展性以及低成本。下面是一个基本指南&#xff0c;帮助你从零开始创建并部署一个FastAPI应用到Serverless环境。 1. 安装FastAPI和Uvicorn 首首先&…

RK3568学习之Nginx移植+RTMP推流

1.下载 Nginx 源码 进入到 Ubuntu 系统的某个目录下&#xff0c;下载 Nginx 源码&#xff1a; wget http://nginx.org/download/nginx-1.20.0.tar.gz这里我们下载的是 1.20 版本&#xff0c;这是比较新的版本了。下载完成之后将得到一个名为 nginx-1.20.0.tar.gz的压缩包文件…

思想实验思维浅谈

思想实验思维浅谈 思想实验&#xff08;Thought Experiment&#xff09;是一种在思想中进行的假想实验&#xff0c;思想实验激发人的想象力和思辨能力&#xff0c;是科学家思考问题的重要工具&#xff0c;通过想象、推理和分析来探索某种理论、假设或概念的可能性和内在逻辑&am…

微服务架构 --- 使用Sentinel来处理请求限流+线程隔离+服务熔断

目录 一.什么是Sentinel&#xff1f; 二.Sentinel的核心概念&#xff1a; 三.Sentinel的使用&#xff1a; 1.在本地运行Sentinel控制台&#xff1a; 2.在微服务模块导入依赖以及配置文件&#xff1a; &#xff08;1&#xff09;导入依赖&#xff1a; &#xff08;2&#…

RPC通讯基础原理

1.RPC&#xff08;Remote Procedure Call&#xff09;概述 RPC是一种通过网络从远程计算机上调用程序的技术&#xff0c;使得构建分布式计算更加容易&#xff0c;在提供强大的远程调用能力时不损失本地调用的语义简洁性&#xff0c;提供一种透明调用机制&#xff0c;让使用者不…

数据字典是什么?和数据库、数据仓库有什么关系?

一、数据字典的定义及作用 数据字典是一种对数据的定义和描述的集合&#xff0c;它包含了数据的名称、类型、长度、取值范围、业务含义、数据来源等详细信息。 数据字典的主要作用如下&#xff1a; 1. 对于数据开发者来说&#xff0c;数据字典包含了关于数据结构和内容的清晰…

centos7上安装minio及使用方法介绍

MinIO是一个高性能、分布式对象存储系统,可以用于存储大量的非结构化数据,例如图片、视频、日志文件等。它是一个开源项目,可以在各种环境中部署,包括本地服务器、公共云和混合云环境。 github仓库地址:https://github.com/minio 一、安装说明 本章教程,是在Linux Centos…

AutoCompleteTextView

AutoCompleteTextView的学习 简单使用AutoCompleteTextView mainactivity.java import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.view.WindowManager; import android.widget.ArrayAdapter; import android.widget.AutoCompleteT…

【环境搭建】远程服务器搭建ElasticSearch

参考&#xff1a; 非常详细的阿里云服务器安装ElasticSearch过程..._阿里云服务器使用elasticsearch-CSDN博客 服务器平台&#xff1a;AutoDL 注意&#xff1a; 1、切换为非root用户&#xff0c;su 新用户名&#xff0c;否则ES无法启动 2、安装过程中没有出现设置账号密码…

“探索Adobe Photoshop 2024:订阅方案、成本效益分析及在线替代品“

设计师们对Adobe Photoshop这款业界领先的图像编辑软件肯定不会陌生。如果你正考虑加入Photoshop的用户行列&#xff0c;可能会对其价格感到好奇。Photoshop的价值在于其强大的功能&#xff0c;而它的价格也反映了这一点。下面&#xff0c;我们就来详细了解一下Adobe Photoshop…

Chromium 如何查找V8 引擎中JavaScript 标准内置对象

JavaScript 标准内置对象 - JavaScript | MDN (mozilla.org) 一、JavaScript 标准内置对象 本章介绍和说明了 JavaScript 中所有的标准内置对象、以及它们的方法和属性。 这里的术语“全局对象”&#xff08;或标准内置对象&#xff09;不应与 global 对象混淆。这里的“全局…

07 django管理系统 - 部门管理 - 搜索部门

在dept_list.html中&#xff0c;添加搜索框 <div class"container-fluid"><div style"margin-bottom: 10px" class"clearfix"><div class"panel panel-default"><!-- Default panel contents --><div clas…

【学习笔记】什么是MongoDB

文章目录 MongoDB 简介体系结构数据模型MongoDB 的特点 MongoDB 简介 学习一个东西就跟认识一个人一样&#xff0c;下面有情MongoDB来做个自我介绍 大家好&#xff0c;俺是MongoDB&#xff0c;是一个开源、高性能、无模式的文档型数据库&#xff0c;当初的设计俺就是用于简化开…

6.计算机网络_UDP

UDP的主要特点&#xff1a; 无连接&#xff0c;发送数据之前不需要建立连接。不保证可靠交付。面向报文。应用层给UDP报文后&#xff0c;UDP并不会抽象为一个一个的字节&#xff0c;而是整个报文一起发送。没有拥塞控制。网络拥堵时&#xff0c;发送端并不会降低发送速率。可以…

UNI VFX Missiles Explosions for Visual Effect Graph

Unity URP和HDRP的通用视觉效果 使用在视觉效果图中制作的高性能GPU粒子系统。 无需进入视觉效果图编辑器即可轻松自定义VFX。 使用(VFX)事件——一个游戏对象可存储多个效果,这些效果可通过C#或视觉脚本触发。 总共32个事件(不包括“停止”事件)。 ❓ 什么是(VFX)事件?…