【插入排序】:直接插入排序、二分插入排序、shell排序

server/2024/11/29 17:09:06/

【插入排序】:直接插入排序、二分插入排序、shell排序

  • 1. 直接插入排序
    • 1.1 详细过程
    • 1.2 代码实现
  • 2. 二分插入排序
    • 2.1 详细过程
    • 2.2 代码实现
  • 3. shell排序
    • 3.1 详细过程
    • 3.2 代码实现

1. 直接插入排序

1.1 详细过程

1.2 代码实现

java">public static void swap(int[]arr,int a,int b){int tmp=arr[a];arr[a]=arr[b];arr[b]=tmp;}public static void sort(int[] arr,int left,int right){if(right>=arr.length) return;if(left>=right) return;if(arr[left]>arr[left+1]){swap(arr,left,left+1);sort(arr,0,left);}left++;sort(arr,left,right);}public static void main(String[] args) {int[] arr=new int[]{1,5,7,21,2,6,93,8};sort(arr,0,arr.length-1);System.out.println(Arrays.toString(arr));}

2. 二分插入排序

2.1 详细过程

2.2 代码实现

java">  public static int search(int[] arr, int left, int right, int key) {if (left > right) {// 没有找到key,返回应该插入的位置return left;}int mid = (left + right) / 2;if (arr[mid] == key) {return mid;}if (arr[mid] > key) {return search(arr, left, mid - 1, key);} else {return search(arr, mid + 1, right, key);}}public static void sort(int[]arr){//遍历比较for (int i = 1; i < arr.length; i++) {if(arr[i]<arr[i-1]){//进入二分查找int pos=search(arr,0,i-1,arr[i]);//目标位置集体往后移int tmp=arr[i];for(int j=i-1;j>=pos;j--){arr[j+1]=arr[j];}//插入arr[pos]=tmp;}System.out.println("第"+i+"次: "+Arrays.toString(arr));}}public static void main(String[] args) {int[] arr=new int[]{1,56,88,66,35,2,8};sort(arr);}

3. shell排序

3.1 详细过程

3.2 代码实现

java">    public static void sort(int[] arr){int gap=arr.length/2;//开始遍历int j=1;do{for(int i=0;i<arr.length-gap;i++){
[video(video-SY1ydW46-1732779457803)(type-csdn)(url-https://live.csdn.net/v/embed/436204)(image-https://v-blog.csdnimg.cn/asset/26566b09687ce9bdc33dff17e9c146c4/cover/Cover0.jpg)(title-二分插入排序1)]if(arr[i]>arr[i+gap]){//交换int tmp=arr[i];arr[i]=arr[i+gap];arr[i+gap]=tmp;}}gap/=2;System.out.println("第"+j+++"次: "+Arrays.toString(arr));}while(gap>=1);}public static void main(String[] args) {int[] arr=new int[]{1,56,88,66,35,2,8};sort(arr);}

http://www.ppmy.cn/server/145948.html

相关文章

Vue源码巧妙设计

Vue.js的源码中蕴含了许多巧妙的设计&#xff0c;这些设计使得Vue成为一个高效、灵活且易于使用的前端框架。以下是对Vue源码中一些巧妙设计的详细讲解&#xff1a; 1. 响应式系统 Vue的响应式系统是其核心特性之一&#xff0c;它允许Vue追踪数据的变化&#xff0c;并在数据变…

MySql之MVVC总结

多版本并发控制MVVC&#xff0c;Multi-Version Concurrency Control,通过数据行的多个版本来控制数据库的并发。mysql只有InnoDB引擎才支持MVVC. 通过管理每条记录的多个版本&#xff0c;实现数据库事务并发时一致性读&#xff0c;当前事务A读取正在被其他事务B更新的数据行时…

使用 Canal 实时从 MySql 向其它库同步数据

目前绝大多数项目还是采用 mysql 作为数据存储&#xff0c;对于用户访问量较高的网站来说&#xff0c;mysql 读写性能有限&#xff0c;我们通常会把 mysql 中的数据实时同步到 Redis、mongodb、elastic search 等中间件中&#xff0c;应对高并发访问场景&#xff0c;减轻 mysql…

知识图谱嵌入评估的常用任务

知识图谱嵌入&#xff08;KGE&#xff09;是通过将图中的实体和关系表示为低维向量&#xff0c;从而使得原本复杂的图结构可以被机器学习模型处理&#xff0c;并用于后续任务。有效的评估方法能够帮助研究者和工程师了解模型在不同任务中的表现&#xff0c;并优化模型以提升其在…

卷积神经网络:图像特征提取与分类的全面指南

目录 引言 卷积层&#xff1a;图像特征的初步提取 局部连接与权重共享 多个卷积核与特征图 激活函数 池化层&#xff1a;降低维度与增强不变性 最大池化与平均池化 空间不变性 全连接层&#xff1a;特征整合与分类决策 特征整合 分类器 Dropout与正则化 训练与优化…

【C++贪心 数论】991. 坏了的计算器|1909

本文涉及知识点 C贪心 数论&#xff1a;质数、最大公约数、菲蜀定理 LeetCode991. 坏了的计算器 在显示着数字 startValue 的坏计算器上&#xff0c;我们可以执行以下两种操作&#xff1a; 双倍&#xff08;Double&#xff09;&#xff1a;将显示屏上的数字乘 2&#xff1b…

快速排序 C++

题目一 解题思路 快排思路 首先设定一个分界值(基准值)&#xff0c;通过该分界值将数组分成左右两部分。将大于或等于分界值的数据集中到数组右边&#xff0c;小于分界值的数据集中到数组的左边。此时&#xff0c;左边部分中各元素都小于分界值&#xff0c;而右边部分中各元素…

【Maven Helper】分析依赖冲突案例

目录 Maven Helper实际案例java文件pom.xml文件运行抛出异常分析 参考资料 Maven Helper A must have plugin for working with Maven. easy way for analyzing and excluding conflicting dependenciesactions to run/debug maven goals for a module that contains the cur…