插入排序的一个优化版本(Java)

5 篇文章 0 订阅
4 篇文章 0 订阅
package sort;

import java.util.ArrayList;
import java.util.Arrays;

/**
 * @description 插入排序在排序过程中是局部有序,随着插入项的增多,有序部分的项的位置会发生改变
 * @author Y
 *
 */
public class InsertSort {
	public static void main(String[] args) {
		int[] a= new int[]{12,73,45,69,35};
		sort(a);
		System.out.println(a.length);
		for (int i : a) {
			System.out.println(i + "--");
		}

		int[] array={12,73,45,69,35};
		int i,j,temp;
		for(i=1;i<array.length;i++) {
			/*
			 * 第一个for循环
			 * 把数组分成两部分,右边为未排序,左边为已排序
			 * 记录排序与未排序分割点temp(temp为下一个排序对象)
			 */
			temp=array[i];
			for(j=i-1;j>=0;j--) {
			/*
			 * 第二个for循环
			 * 将排序对象temp与已排序数组比较
			 * 当temp比最近左边的数大时(按从小到大循序排列时)
			 * 直接结束本次循环,进行下一个数排序
			 * 否则比左边这个数小时将这个数后移,腾出这个数的位置
			 */
			   if (temp > array[j]) {
					break;
			   }else{
		    	   array[j+1] = array[j];//移动
		       }
			}
			array[j+1]=temp;
		}
		System.out.println(Arrays.toString(array));
	}

	private static void sort(int[] a) {
		// TODO Auto-generated method stub
		int temp=0;
		for (int i = 1; i < a.length; i++) {
			temp = a[i];
			for (int j = i-1; j>=0; j--) {
				if (temp>a[j]) {
					break;
				}else {
					a[j+1] = a[j];//1
					a[j] = temp;//2  1+2的操作就是换值
				}
			}
		}
	}
}

这里有两种实现了两种插入排序,我们对比一下可以发现,在main里面的插入排序明显是更加优秀的,他化了交换数值的过程。
在sort中,就是每次内层循环的整理过程中
sort里面是每次都比较,完后就换值
在main里面那个版本,就是每次比较完就移动,最后把temp放入数组里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值