排序算法——插入排序

插入排序首先想象一个空的数组,将原数列依次向里放,每次放时都先与前一个数比较,如果大于前一个数就直接放后边不需要再比较,如果小就插到该数前边继续向前一个数比较如果还小就继续向前插,直到比前一个数大时停止比较。

例:将 2, 7, 4, 9, 1, 3 按从小到大排列:

先将2插入数组: 2

然后放7,与2比较比2 大直接往后方放: 2  7

放4:  4比7小所以与7交换插到7前边在和2比较比2大不需要再换插到2后边: 2  4  7

放9:  9比7大直接往后放  :   2 4 7 9

放1:先与9比   比9小往前放  再与7比还小继续往前放  因为1最小一直往前直到比完最后一个: 1  2  4  7 9

方3: 先与9比  比9小往前放 与7比也小继续往前放,直到与二比的时候比2大插到2的后边:1 2 3 4 7 9

插入排序算法代码:

/**
插入排序:
想象一个新的数组 先把第一个数放进去,放下一个数时与前一个数比较如果大就继续往后放,如果小继续向前一个数比较  比较到合适位置将其插入
*/
	public static void insert(int[] arr){
		//外层循环控制插数次数,第一个数直接放入可以少插一次所以length-1;  
		for(int i=0;i<arr.length-1;i++){
			//内次循环控制比较次数 当前插入数依次向前比较;
			for(int j=i+1;j>0;j--){
				if(arr[j]<arr[j-1]){ //如果遇到比自己大的数就交换位置 ; 
					exchange(arr,j,j-1);  //交换两数位置
				}else {        //如果比自己小就不需要比较直接跳出拿下一个数;
					break;
				}
			}
		}
		
	}

exchange();换位方法,需要交换位置时调用该方法即可:


public static void exchange(int[] arr,int i,int j){
		int t=0;
		t=arr[i];
		arr[i]=arr[j];
		arr[j]=t;
	}

总结:插入排序与冒泡和选择相比,冒泡和选择每个数都要和其它数都进行比较依次,相对来数插入算法的比较次数更少,算法更优。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值