数据结构与算法分析-Java描述(2)-插入排序

插入排序有两种算法:直接插入排序和希尔排序

  • 直接插入排序

 原理:插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。

该排序算法的外部循环为遍历全部元素,内部循环为遍历当前外部循环记录元素的前面所有数字。

public static void insertSort(int[] arr) {
	for(int i = 1;i < arr.length;i++) {
                //在保证当前元素之前的数字是有序的情况下
		if(arr[i]<arr[i-1]) {
			//把当前遍历的数字存起来
			int temp = arr[i];
			int j;
			//遍历当前元素i前面所有的数字
			for(j = i-1; j>=0 && temp<arr[j] ;j--) {
				//把前一个数字赋给后一个数字
				arr[j+1] = arr[j];
			}
                        //arr[j]不满足即temp>arr[j],应当放在arr[j]的后面
			//把临时变量(外层for循环的当前元素)赋给不满足条件的后一个元素
			arr[j+1] = temp;
		}
	}
}
  • 希尔排序

原理:也被称为“缩小增量排序”,将待排序的数组元素按照步长分成多个子序列,使得每个子序列的元素个数相对较少,然后对各个子序列分别进行直接插入排序,直到最后步长降为1,再对所有元素进行一次直接插入排序。

该排序算法属于直接插入算法的改进,代码简洁易懂,直接贴。

public static void shellSort(int[] arr) {
	//遍历所有的步长
	for(int d = arr.length/2 ; d>0 ; d/=2) {
		//遍历所有的元素
		for(int i=d;i<arr.length;i++) {
			//遍历本组中所有的元素
			for(int j=i-d ; j>=0 ; j-=d) {
				//如果当前元素大于加上步长后的那个元素
				if(arr[j]>arr[j+d]) {
					int temp = arr[j];
					arr[j] = arr[j+d];
					arr[j+d] = temp;
				}
			}
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值