Java 排序算法:折半插入排序

article/2025/10/24 16:03:46

有关排序的基本内容可以查看以下链接:

折半插入排序_360百科折半插入排序,折半插入排序(Binary Insertion Sort)是对插入排序算法的一种改进。所谓插入排序,就是不断的依次将元素插入前面已排好序的序列中。https://baike.so.com/doc/7028767-7251672.html


个人理解:将无序部分元素插入到有序部分中,可先假设首位元素为有序部分,剩余元素为无序部分,将无序部分中的元素插入到有序部分中,形成新的有序部分,直到所有元素有序。其中,插入过程采用折半查找法,来寻找合适位置。


步骤思路:

  1. 假设首元素为有序部分,所以循环起始条件设置为 i = 1(即无序部分的首元素)
  2. 设置两个类指针变量(low, high),用于折半查找的比较。low 初始化为有序部分的开始(因为将前面设为有序部分,所以初始值为 0),high 初始化为有序部分的末尾(因为末尾位置会随着插入元素而改变,所以初始化为 i - 1,即无序部分的前一个元素位置)
  3. 折半查找:寻找中间元素位置:mid = (low + high) / 2,将 Array[i] 与 Array[mid] 相比较,若小于,则将末尾“指针”提前:high = mid - 1,否则,将开始“指针”后移:low = mid + 1
  4. 重复步骤 3,直到 low > high,终止递归,此时插入位置即为 low
  5. 后移数组,留出插入位置:对于 i 以后的无序部分而言,并没有参与,所以并不需要移动,仅需要将low到 i - 1 部分的数组向后移动一位
  6. 将 i 位置元素赋值到 low 位置(注意在上一步要储存原始 i 位置的元素)
  7. 此时第一个无序元素插入结束,i++,进入下一个无序元素的插入

Java代码如下:

//折半插入排序
import java.util.Arrays;public class BinaryInsertion_sort {public static void main(String[] args) {int[] arr = Arrays_create.create(10, 0, 100);//此处为自己编写的产生指定随机数组的方法,可替换为自己的数组使用。System.out.println(Arrays.toString(arr));System.out.println();for (int i = 1; i < arr.length; i++) {Insert(arr, 0, i - 1, i);//System.out.println(Arrays.toString(arr));}System.out.println(Arrays.toString(arr));}public static void Insert(int[] arr, int low, int high, int target) {if (low <= high) {//终止条件int mid = (low + high) / 2;//中间值if (arr[target] < arr[mid]) {//判断插入区间high = mid - 1;} else {low = mid + 1;}Insert(arr, low, high, target);//递归}else {//依次将其他元素后移int temp = arr[target];for (int i = target; i > low; i--) {arr[i] = arr[i - 1];	}arr[low] = temp;//插入目标元素}		}
}


http://chatgpt.dhexx.cn/article/2sQJqUXu.shtml

相关文章

Java排序算法——猴子排序(Bogo Sort)

此排序和之前介绍的三种排序没有任何关系&#xff0c;只是单纯在整理排序算法突然想到曾经看到过关于此排序的描述&#xff0c;现在总结一下。 之前三种排序的传送门开一下&#xff1a; 冒泡排序&#xff1a; Java排序算法——冒泡排序&#xff08;Bubble Sort&#xff09;ht…

java排序算法精讲

排序算法 概要一、冒泡排序概念实现步骤 代码 二、选择排序概念实现步骤 代码 三、插入排序概念实现步骤 代码 四、快速排序概念实现步骤 代码 五、归并排序概念实现步骤 代码 六、堆排序概念实现步骤 代码 总结以二维表表现出各个排序的关系 概要 Java是一种面向对象的编程语言…

Java排序算法(一):冒泡排序

冒泡排序 一、原理二、排序步骤三、实现代码四、复杂度分析 一、原理 冒泡排序是相邻的元素两两比较&#xff0c;把小的元素往前调或者把大的元素往后调&#xff0c;实现最大(小)值排列在一端。 注&#xff1a;相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法 …

十大经典排序算法(Java实现)

排序算法的重要性不言而喻&#xff0c;为了加深对这十种算法的理解&#xff0c;固写此文。 目录 1、冒泡排序&#xff08;Bubble Sort&#xff09;2、选择排序&#xff08;Selection Sort&#xff09;3、插入排序&#xff08;Insertion Sort&#xff09;4、希尔排序&#xff0…

Java排序算法——插入排序(Insertion Sort)

之前总结了交换排序的冒泡排序与选择排序的简单选择排序&#xff0c;这次我们来看看插入排序的简单插入排序~ 往期传送门&#xff1a; 冒泡排序&#xff1a; Java排序算法——冒泡排序&#xff08;Bubble Sort&#xff09;https://blog.csdn.net/babbfqb93/article/details/…

Java排序算法——冒泡排序(Bubble Sort)

冒泡排序是所有排序算法中最简单的一个排序&#xff0c;也是我个人学习的第一个排序方法&#xff0c;在这里重新进行一个总结。 冒泡排序&#xff08;Bubble Sort&#xff09;就如同其名称一样&#xff0c;水中的气泡由于压强的原因所以从下到上其大小也是从小到大&#xff0c…

Java排序算法——插入排序

Java排序算法——插入排序&#xff08;Insertion Sort&#xff09; 传送门 冒泡排序选择排序 简述 插入排序&#xff08;Insertion Sort&#xff09;是一种简单直观的排序算法。它的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前…

Java实现排序算法

一、常见排序算法&#xff1a; 1、插入类排序&#xff1a; (1)直接插入排序 (2)希尔排序 2、选择类排序 (1)简单选择排序 (2)堆排序 3、交换类排序 (1)冒泡排序 (2)快速排序 4、归并排序 5、基数排序 二、内部排序&#xff1a;只考虑数据量较小仅需要使用内存的排序算法 三、…

Java排序算法——选择排序

Java排序算法——选择排序&#xff08;Selection sort&#xff09; 传送门 冒泡排序插入排序 简述 选择排序&#xff08;Selection sort&#xff09;是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小&#xff08;大&#xff09;元素&#xff0c;存放…

JAVA排序:快速排序算法

Java实现快速排序算法 快速排序算法体现了—分治思想&#xff1a;将大问题划分为多个相同独立的小问题&#xff0c;每个小问题的解决合在一起解决了大问题 实现快速排序的思想&#xff1a; {2,4,1,0,3,5}是目标数组 {0,1,2,3,4,5}是结果数组 选取中心轴pivot(中心轴的值用于比较…

Java排序算法——选择排序(Selection Sort)

上次总结了一下冒泡排序&#xff0c;这次来看看同样非常简单的选择排序 上期冒泡排序传送门&#xff1a; Java排序算法——冒泡排序&#xff08;Bubble Sort&#xff09;https://blog.csdn.net/babbfqb93/article/details/123005968?spm1001.2014.3001.5501 选择排序&#…

选择排序——Java排序算法

选择排序 选择排序&#xff08;SelectSort&#xff09;选择排序是所有排序中最简单的排序算法之一&#xff0c;同时也是要求我们必须掌握的排序算法之一。 时间复杂度 选择排序的时间复杂度为(n2) 算法步骤 1.在未排序的序列中找到最小或者最大的元素&#xff0c;存放到排…

java 排序api_JAVA排序算法API

上一个类 下一个类 框架 无框架 摘要&#xff1a; 嵌套 | 字段 | 构造函数 | 方法 详细信息&#xff1a; 字段 | 构造函数 | 方法 org.luosijin.test 类 Sort java.lang.Object org.luosijin.test.Sort public class Sort extends java.lang.Object Java实现几种常见排序方…

Java排序算法

7.1 排序算法的介绍 排序也称排序算法(Sort Algorithm)&#xff0c;排序是将一组数据&#xff0c;依指定的顺序进行排列的过程。 7.2 排序的分类 内部排序: 指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。外部排序法&#xff1a; 数据量过大&#xff0c;无法全…

常见几种java排序算法

常见几种java排序算法 0. 总览时间复杂度和稳定性 1.插入排序2.分治排序法,快速排序法3.冒泡排序 low版4.冒泡排序 bigger版5.选择排序6. 归并排序8. 堆排序踩坑v1.0 巨慢不能用v2.0 太慢不能用v3.0 9. 其他排序7. 比较 0. 总览 时间复杂度和稳定性 平均最好最差稳定性冒泡n2…

Java常用实现八种排序算法与代码实现

一、交换排序 所谓交换&#xff0c;就是序列中任意两个元素进行比较&#xff0c;根据比较结果来交换各自在序列中的位置&#xff0c;以此达到排序的目的。 1. 冒泡排序 冒泡排序是一种简单的交换排序算法&#xff0c;以升序排序为例&#xff0c;其核心思想是&#xff1a; 从…

十大经典排序算法——java语言

文章目录 一、冒泡排序二、选择排序三、插入排序四、希尔排序五、归并排序六、快速排序七、堆排序八、计数排序九、桶排序十、基数排序 一、冒泡排序 概述&#xff1a; 冒泡排序是一种简单直观的排序算法。它重复的走访要排序的数列&#xff0c;一次比较两个元素&#xff0c;按…

Java常见排序算法

目录 1、归并排序 2、堆排序 3、基数排序 4、冒泡排序 5、希尔排序 6、快速排序 7、插入排序 8、选择排序 1、归并排序 1、基本思想 归并排序&#xff08;MERGE-SORT&#xff09;是利用归并的思想实现的排序方法&#xff0c;该算法采用经典的分治&#xff08;divide-a…

java实现七种经典排序算法

简单算法&#xff1a;冒泡&#xff0c;简单选择&#xff0c;直接插入 改进算法&#xff1a;希尔&#xff0c;堆&#xff0c;归并&#xff0c;快速 直接插入排序&#xff1a;将一个记录插入到已经拍好的有序列表中&#xff0c;从而得到一个新的、记录数增加1的有序表。 冒泡排…

java实现10种排序算法

1.冒泡排序(Bubble Sort) import java.util.Arrays; //冒泡排序 public class BubbleSort_01 {public static void main(String[] args) {int a[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};//记录比较次数int count0;//i0,第一轮比较for (int i 0; i < a.length-1; i) {…