手工画图理解常见七种排序算法

2024-04-04 22:08

本文主要是介绍手工画图理解常见七种排序算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

常见排序算法及介绍
一,直接插入排序
原理:
整个区间分为有序区间和无序区间,每次拿到无序区间的第一个数去有序区间里找对应的位置。

稳定性:稳定
空间复杂度:O(1)
平均时间复杂度:O(n的平方)
最优情况时间复杂度:O(n)
最坏情况下时间复杂度:O(n的平方)
在这里插入图片描述注意:默认第一个数是有序的故从第二个数开始
代码实现 :

 //直接插入排序public static void indexSort(int[] arr) {int tmp = arr[0];for(int i = 1;i < arr.length;i++) {tmp = arr[i];int j;for( j = i-1;j >= 0;j--) {if(arr[j] > tmp) {arr[j+1] = arr[j];}else {break;}}arr[j+1] = tmp;}}

对于直接插入排序当数据小的时候工作量不是很大,但是当数据多的时候直接插入就有点效率低了,因此在直接插入的基础上还可以改进在有序区间找的时候可以利用二分查找法
代码如下:

//直接插入排序下的折半查找public static void BsInsertSort(int[] arr) {for(int i = 1;i < arr.length;i++) {int ret = arr[i];int left = 0;int right = i;while(left < right) {int mid = (left + right)/2;if(arr[mid] <= ret) {left = mid+1;}else {right = mid;//考虑到当在边界时,故不能-1;}}for(int j = i;j >left;j--) {arr[j] = arr[j-1];}arr[left] = ret;}}

二,希尔排序
希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成个组,所有距离为gap的记录分在同一组内,并对每一组内的记录进行排序。然后,取,重复上述分组和排序的工作。当到达gap=1时,所有记录在统一组内排好序。
即选择好要排序的组数,从大到小进行

稳定性:不稳定
空间复杂度:O(1)
平均时间复杂度:O(n的1.3次方)
最优情况时间复杂度:O(n)
最坏情况下时间复杂度:O(n的平方)
原排序数字:
在这里插入图片描述
在下图中选择gap = 5 ,3 1
当gap = 5时:
第一次结果如下:
在这里插入图片描述当取gap=3时,即分为三组
此时如图所示
在这里插入图片描述交换后结果:
在这里插入图片描述从此次结果可以看出,越小的越靠前,越有序,

接下来在整体进行直接插入排序 ,即可,
最终得到排序结果:
在这里插入图片描述代码实现:

//希尔排序public static void shell(int[] arr,int gap

这篇关于手工画图理解常见七种排序算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/876923

相关文章

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

C++归并排序代码实现示例代码

《C++归并排序代码实现示例代码》归并排序将待排序数组分成两个子数组,分别对这两个子数组进行排序,然后将排序好的子数组合并,得到排序后的数组,:本文主要介绍C++归并排序代码实现的相关资料,需要的... 目录1 算法核心思想2 代码实现3 算法时间复杂度1 算法核心思想归并排序是一种高效的排序方式,需要用

MySQL ORDER BY 语句常见用法、示例详解

《MySQLORDERBY语句常见用法、示例详解》ORDERBY是结构化查询语言(SQL)中的关键字,隶属于SELECT语句的子句结构,用于对查询结果集按指定列进行排序,本文给大家介绍MySQL... 目录mysql ORDER BY 语句详细说明1.基本语法2.排序方向详解3.多列排序4.常见用法示例5.

深入理解go中interface机制

《深入理解go中interface机制》本文主要介绍了深入理解go中interface机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前言interface使用类型判断总结前言go的interface是一组method的集合,不

MySQL 索引简介及常见的索引类型有哪些

《MySQL索引简介及常见的索引类型有哪些》MySQL索引是加速数据检索的特殊结构,用于存储列值与位置信息,常见的索引类型包括:主键索引、唯一索引、普通索引、复合索引、全文索引和空间索引等,本文介绍... 目录什么是 mysql 的索引?常见的索引类型有哪些?总结性回答详细解释1. MySQL 索引的概念2

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I