java实现插入排序

      插入排序是一种通过不断地把新元素插入到已排好序的数据中的排序算法,常用的插入排序算法包括直接插入排序和shell排序,直接插入排序实现比较简单,时间复杂度是O(n),但是直接插入没有充分的利用已插入的数据已经排序这个事实,因此有很多针对直接插入排序改进的算法,例如折半插入排序等,下边是直接插入排序的Java实现:

public static void insertSort(int[] elements) {
		for (int i = 1; i < elements.length; i++) {
			int j = -1;
			while (j <= i && elements[i] > elements[++j])
				;// 找到element[i]应该摆放的位置,此处可以利用查找算法进行优化
			if (j < i) { // 将j之后的数据移动一位,然后把elements[i]移动到j处
				int temp = elements[i];
				for (int k = i - 1; k >= j; k--) {
					elements[k + 1] = elements[k];
				}
				elements[j] = temp;
			}
		}
	}


另一种常用的插入排序算法:Shell排序也是对直接插入排序算法的一种优化,因此可以说直接插入排序是一种特殊的Shell排序,Shell排序对直接插入排序的优化主要体现在,Shell排序通过使用一个增量序列(递减),每次把要排序的数组分成几个子数组,然后对子数组进行插入排序,这样可以减少比较和移动数据的次数,Shell排序是一种非常高效的排序算法,该算法的思想是:
  1.以h(h一般取n/2)为间隔将n个元素列分为几个小组,在每个小组内按直接插入法排序
  2.令h=h/2,重复第1步
  3.当h=1时,排序结束(此时相当于直接插入排序,不过由于数据已经基本排好序,因此比较次数和移动次数比直接插入排序少很多)
  Shell排序的Java实现如下:
	public static void shellSort(int[] elements) {
		for (int h = elements.length / 2; h > 0; h /= 2) {
			for (int i = h; i < elements.length; i++) {
				int j = i % h;
				while (j <= i && elements[i] > elements[j])
					j += h;// 找到element[i]应该摆放的位置
				if (j < i) { // 将j之后的数据移动h位,然后把elements[i]移动到j处
					int temp = elements[i];
					for (int k = i - h; k >= j; k -= h) {
						elements[k + h] = elements[k];
					}
					elements[j] = temp;
				}
			}
		}
	}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值