排序算法--插入排序

插入排序

基本介绍:
  插入排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。
基本思想:
  是一种简单直观且稳定的排序算法。插入算法把要排序的数组分成两部分:第一部分为有序表,开始时有序表只包含一个元素,第二部分为无序表,无序表中有n-1个元素。排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素中的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
动图:
在这里插入图片描述
思路图解:
在这里插入图片描述
注:蓝色填充为无序
代码演示:

分步演示代码:

package InsertSort;

import java.util.Arrays;

public class insertsort {
	public static void main(String[] args) {
		int arr[] = {101,34,119,1};
		insert(arr);
	}
	public static void insert(int arr[]) {
		
		//第一轮
		int insertValue = arr[1];//需要排序的数
		int insertIndex = 0;//需要插入数的前一个数的下标
		
		//进行插入
		//1、insertIndex>=0 防止越界
		//2、insertValue<arr[insertIndex] 满足待插入的数小于前一个数,还没有找到插入位置
		//3、当前这个值后移此时数组变成 {101,101,119,1}
		while(insertIndex>=0 && insertValue<arr[insertIndex]) {
			arr[insertIndex+1] = arr[insertIndex];  //此时数组变成 {101,101,119,1}
			insertIndex--;
		}
		//当退出while循环时,说明插入的位置找到,insertIndex+1;
		//例如 {101,334,119,1}如果不满足while循环则直接插入到后面的位置
		arr[insertIndex+1] = insertValue;
		System.out.println("第一轮插入后");
		System.out.println(Arrays.toString(arr));
		
		
		//第二轮
		int insertValue1 = arr[2];//需要排序的数
		int insertIndex1 = 1;//需要插入数的前一个数的下标
		
		//进行插入
		//1、insertIndex>=0 防止越界
		//2、insertValue<arr[insertIndex] 满足待插入的数小于前一个数,还没有找到插入位置
		//3、当前这个值后移此时数组变成 {101,101,119,1}
		while(insertIndex1>=0 && insertValue1<arr[insertIndex1]) {
			arr[insertIndex1+1] = arr[insertIndex1];  //此时数组变成 {101,101,119,1}
			insertIndex1--;
		}
		//当退出while循环时,说明插入的位置找到,insertIndex+1;
		//例如 {101,334,119,1}如果不满足while循环则直接插入到后面的位置
		arr[insertIndex1+1] = insertValue1;
		System.out.println("第二轮插入后");
		System.out.println(Arrays.toString(arr));
		
		//第三轮
		int insertValue2 = arr[3];//需要排序的数
		int insertIndex2 = 2;//需要插入数的前一个数的下标
		
		//进行插入
		//1、insertIndex>=0 防止越界
		//2、insertValue<arr[insertIndex] 满足待插入的数小于前一个数,还没有找到插入位置
		//3、当前这个值后移此时数组变成 {101,101,119,1}
		while(insertIndex2>=0 && insertValue2<arr[insertIndex2]) {
			arr[insertIndex2+1] = arr[insertIndex2];  //此时数组变成 {101,101,119,1}
			insertIndex2--;
		}
		//当退出while循环时,说明插入的位置找到,insertIndex+1;
		//例如 {101,334,119,1}如果不满足while循环则直接插入到后面的位置
		arr[insertIndex2+1] = insertValue2;
		System.out.println("第三轮插入后");
		System.out.println(Arrays.toString(arr));
	}
}

综合后代码:

package InsertSort;

import java.util.Arrays;

public class insertsort {
	public static void main(String[] args) {
		int arr[] = {101,34,119,1};
		insert(arr);
	}
	public static void insert(int arr[]) {
		//综合
		for(int i=1;i<arr.length;i++) {
			//第一轮
			int insertValue = arr[i];//需要排序的数
			int insertIndex = i-1;//需要插入数的前一个数的下标
			
			//进行插入
			//1、insertIndex>=0 防止越界
			//2、insertValue<arr[insertIndex] 满足待插入的数小于前一个数,还没有找到插入位置
			//3、当前这个值后移此时数组变成 {101,101,119,1}
			while(insertIndex>=0 && insertValue<arr[insertIndex]) {
				arr[insertIndex+1] = arr[insertIndex];  //此时数组变成 {101,101,119,1}
				insertIndex--;
			}
			//当退出while循环时,说明插入的位置找到,insertIndex+1;
			//例如 {101,334,119,1}如果不满足while循环则直接插入到后面的位置
			arr[insertIndex+1] = insertValue;
			System.out.println("插入后");
			System.out.println(Arrays.toString(arr));
		}
		
		
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值