直接插入排序算法的实现(Java 版)

本文详细介绍了Java版的直接插入排序算法,涉及byte、short、int、long、float、double等基本数据类型的排序,以及升序和降序两种排序方式。通过代码示例演示了如何使用move()方法进行元素插入,以及Arrays.sort()方法的对比。
摘要由CSDN通过智能技术生成

直接插入排序算法的实现(Java 版)

  • 同 冒泡排序一样,主要写了 六种基本数据类型(byte、short、int、long、float、double)的排序算法。

  • Arrays.sort(longs1);是 Java 提供的排序方法,可以用来比较看看有没有成功。

  • 升序、降序就是比较上有区别,其他无不同。

  • 因为基本数据类型不能用泛型表示,所以每个数据类型都要写一个排序方法,但基本一样。

  • 其中,整数byte(1 字节)、short(2 字节)、int(4 字节)、long(8 字节) 来存储。

  • 小数float(4 字节)、double(8 字节) 来存储。

原理

  • 将数组(链表)中的数据分为两个区间:已排序区间和未排序区间初始已排序区间只有一个元素,就是数组的第一个元素

  • 插入排序每次会从未排序区间中找一个元素(这个元素一般是取未排序区第一位元素),在已排序区间中找到合适的插入位置将其插入,保证已排序区间的数据一直有序。

  • 重复这个过程,直到未排序区间中元素为空,算法结束。

  • 上一篇:常用的排序方法

图示

在这里插入图片描述
在这里插入图片描述

代码

  • 传入 int[] 数组的算法为例

  • 待插入元素 tmp 插入位时,同时将元素后移,腾出位置给 tmp

public class InsertionSort {
	
	/**
	 * 将 int[] 进行排序(整数排序)
	 * <p>
	 * 升序
	 *
	 * @param a int[]
	 *
	 * @return int[]
	 */
	public static int[] sortAsc(int[] a) {
		// 用来保存取到的待排序元素
		int tmp;
		// 默认第一个元素属于 已排序区
		for(int i = 1; i < a.length; i++) {
			// 取待排序区的第一个元素
			tmp = a[i];
			// 从后往前遍历已排序区,找到 待排序元素 应该存放的位置
			int j = i - 1;
			while(j >= 0 && a[j] > tmp) {
				// 元素后移一位
				move(a, j, j + 1);
				j--;
			}
			// 循环结束,就是找到了
			// 要放到 a[0] 也是这样
			// j 在结束循环时,又减少了 1,所以要加 1
			a[j + 1] = tmp;
		}
		return a;
	}
	
	/**
	 * 将 int[] 进行排序(整数排序)
	 * <p>
	 * 降序
	 *
	 * @param a int[]
	 *
	 * @return int[]
	 */
	public static int[] sortDesc(int[] a) {
		int tmp;
		for(int i = 1; i < a.length; i++) {
			tmp = a[i];
			int j = i - 1;
			while(j >= 0 && a[j] < tmp) {
				move(a, j, j + 1);
				j--;
			}
			a[j + 1] = tmp;
		}
		return a;
	}
	
	/**
	 * 移动方法,移动 int 数组中的 某个元素到目标位置(基本数据类型)
	 * <p>
	 * 不需要交换
	 *
	 * @param array 数组
	 * @param o     元素所在的位置 下标
	 * @param t     元素要移动到的位置 下标
	 */
	private static void move(int[] array, int o, int t) {
		array[t] = array[o];
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十⑧

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值