排序算法之插入排序

插入排序 (Insertion Sorting) 的基本思想是:

把 n 个待排序的元素看成为一个有序表和一个无序表,

开始有序表只包含一个元素, 无序表中包含有 n-1 个元素,

排序过程中每次从无序表中取出第一个元素,

把它的排序码依次与有序表元素的排序码进行比较,

将它插入到有序表中的适当位置,使之成为新的有序表。


 

插入排序的算法code:


class Insert{
	
	public void sort(int arr[])
	{
		/**
		 * 这里是我们从下标为1的元素开始插入,因为第0号元素
		 * 我们默认为是有序的。然后要比较的长度是从1号元素
		 * 直到数组的结尾,所以i从1开始,到最有一个元素
		 * arr.length - 1
		 */
		for(int i = 1; i < arr.length; i++)
		{
			//indecVal用来记录我要插入的元素的值,方便后面使用
			int indexVal = arr[i];
			
			/**
			 * index是我们要比较的前一个数据,因为要插入的数据先与
			 * 前面已经排好顺序的序列最后一个进行比较,如果比前面的小
			 * 那么就往前比较,直到比前面的数大或者前面没有数据了为止。
			 */
			int index = i - 1;
			
			/**
			 * 这里就是要控制被比较的数不能越过数组的最前端,0号元素。
			 * 且要插入的这个数据比前面的小,就把该元素进行后移一位。
			 * 直到找到比插入的数据小的元素时,就排在该元素后面。
			 * 或者当插入的数据为最小的时候,就排到第0号元素
			 */
			while(index>=0 && (indexVal < arr[index]))
			{
				/**
				 * 比要插入的元素大的数据进行后移一位
				 */
				arr[index + 1] = arr[index];
				
				/**
				 * 数组下标往前再进一位,方便下一个元素的比较
				 */
				index--;
			}
			
			/**
			 * 当找到合适位置的时候,把插入的数据放到该位置上
			 */
			arr[index + 1] = indexVal;
		}
	}
}

调用插入排序:

int arr[] = {-9, -50, 1, 20, 63, 12, 7};
		
		Insert insert = new Insert();
		
		insert.sort(arr);
		
		for(int i = 0; i < arr.length; i++)
		{
			System.out.println("arr[" + i + "] = " + arr[i]);
		}

 

最后输出的结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值