插入排序算法

//这里为了方便理解,先简单推导了排序的前3轮,之后再总结出最终的排序算法
//插入排序算法基本思想:
//把n个待排序的元素看成一个有序表一个无序表,开始的时候有序表只包含一个元素,无序表包含n - 1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将他插入到有序表的合适位置

import java.util.Arrays;
public class InsertSort{
	public static void main(String[] args){
		int[] arr = {1, 213, 123, 12, 12, 32231, 241};
		insertSort(arr);
		System.out.println("排序后:" + Arrays.toString(arr));
	}
	
	public static void insertSort(int[] arr)		
	{
		//第一轮
		//定义插入数
		//第一轮待插入下标为0
		//插入数为数组第二个元素arr[1];
		int insertVal = arr[1];
		int insertIndex = 0;
		//下面进行while循环判断
		while(insertIndex >= 0, arr[insertIndex] > insertVal){
			//将待插入数的下标对应元素往后移一个
			arr[insertIndex + 1] = arr[insertIndex];
			//待插入下标往前移一位
			insertIndex--;
		}
		//退出while循环的时候
		//有两种情况
		//1.insertIndex = -1,表明在有序表中没有找到比插入数值小的值,那么就将插入数,插在有序表的第一个位置
		//arr[-1 + 1] = insertVal;
		//也就是arr[insertIndex + 1];
		//2.insertIndex >= 0 && arr[insertIndex] < insertVal
		//此时应该将insertVal插入到arr[insertIndex + 1]的位置
		arr[insertIndex + 1] = insertVal;

		//第二轮
		insertVal = arr[2];
		insertIndex = 1;
		while(insertIndex >= 0, arr[insertIndex] > insertVal){
			arr[insertIndex + 1] = arr[insertIndex];
			insertIndex--;
		}
		arr[insertIndex + 1] = insertVal;

		//第三轮
		insertVal = arr[3];
		insertIndex = 2;
		while(insertIndex >= 0, arr[insertIndex] > insertVal){
			arr[insertIndex + 1] = arr[insertIndex];
			insertIndex--;
		}
		arr[insertIndex + 1] = insertVal;
	}
		
		//依次类推
		//整理出插入排序算法
		for(int i = 1; i < arr.length; i++){
			int insertIndex = i - 1;
			int insertVal = arr[i];
			while(insertIndex >= 0, arr[insertIndex] > insertVal){
				arr[insertIndex + 1] = arr[insertIndex];
				insertIndex--;
			}
			arr[insertIndex + 1] = insertVal;
		}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值