java实现插入排序+代码推导

图解
在这里插入图片描述
代码推导:

package data_structure;

import java.util.Arrays;

public class insertSort {
    
    
public static void main(String[] args) {
    
    
	int [] arr= {
    
    5,1,17,11,9};
	insert(arr);
}
public static void insert(int [] arr) {
    
    
	//第一轮{5,1,17,11,9}; 
	//{5,1,17,11,9}; => {5,5,17,11,9};  //1去那了   去insertVal里了
	//定义待插入的数
	int insertVal = arr[1];  //这是第一个数,因为第一个数默认是一个有序列表(下标为1,实际上他是第二个数)
	int insertIndex = 1-1;   //即arr[1]的前面这个数的下标(也可以看成是数组的第一个数字)
	
	//给insertVal找到插入的位置
	//说明
	//1、insertIndex >= 0 保证在给insertVal 找插入位置,只要>=0才会不断的往前挤
	//2、insertVal <= arr[insertIndex] 待插入的数据,还没有找到插入位置
	//3、就需要将arr[insertIndex]后移
	while(insertIndex >= 0 && insertVal <= arr[insertIndex]) {
    
    
		arr[insertIndex + 1] = arr[insertIndex];
		insertIndex--;//从后往前移动
	}
	//当退出while循环时,说明插入的位置找到,insertIndex +1
	arr[insertIndex+1]=insertVal;
	
	System.out.println("第一轮插入");
	System.out.println(Arrays.toString(arr));
	
	insertVal = arr[1+1];  //这是第一个数,因为第一个数默认是一个有序列表(下标为1,实际上他是第二个数)
	insertIndex = 1;   //即arr[1]的前面这个数的下标(也可以看成是数组的第一个数字)
	
	//给insertVal找到插入的位置
	//说明
	//1、insertIndex >= 0 保证在给insertVal 找插入位置,只要>=0才会不断的往前挤
	//2、insertVal <= arr[insertIndex] 待插入的数据,还没有找到插入位置
	//3、就需要将arr[insertIndex]后移
	while(insertIndex >= 0 && insertVal <= arr[insertIndex]) {
    
    
		arr[insertIndex + 1] = arr[insertIndex];
		insertIndex--;//从后往前移动
	}
	//当退出while循环时,说明插入的位置找到,insertIndex +1
	arr[insertIndex+1]=insertVal;
	
	System.out.println("第二轮插入");
	System.out.println(Arrays.toString(arr));
	
	
	insertVal = arr[1+1+1];  //这是第一个数,因为第一个数默认是一个有序列表(下标为1,实际上他是第二个数)
	insertIndex = 2;   //即arr[1]的前面这个数的下标(也可以看成是数组的第一个数字)
	
	//给insertVal找到插入的位置
	//说明
	//1、insertIndex >= 0 保证在给insertVal 找插入位置,只要>=0才会不断的往前挤
	//2、insertVal <= arr[insertIndex] 待插入的数据,还没有找到插入位置
	//3、就需要将arr[insertIndex]后移
	while(insertIndex >= 0 && insertVal <= arr[insertIndex]) {
    
    
		arr[insertIndex + 1] = arr[insertIndex];
		insertIndex--;//从后往前移动
	}
	//当退出while循环时,说明插入的位置找到,insertIndex +1
	arr[insertIndex+1]=insertVal;
	
	System.out.println("第三轮插入");
	System.out.println(Arrays.toString(arr));
	
	
	insertVal = arr[1+1+1+1];  //这是第一个数,因为第一个数默认是一个有序列表(下标为1,实际上他是第二个数)
	insertIndex = 3;   //即arr[1]的前面这个数的下标(也可以看成是数组的第一个数字)
	
	//给insertVal找到插入的位置
	//说明
	//1、insertIndex >= 0 保证在给insertVal 找插入位置,只要>=0才会不断的往前挤
	//2、insertVal <= arr[insertIndex] 待插入的数据,还没有找到插入位置
	//3、就需要将arr[insertIndex]后移
	while(insertIndex >= 0 && insertVal <= arr[insertIndex]) {
    
    
		arr[insertIndex + 1] = arr[insertIndex];
		insertIndex--;//从后往前移动
	}
	//当退出while循环时,说明插入的位置找到,insertIndex +1
	arr[insertIndex+1]=insertVal;
	
	System.out.println("第四轮插入");
	System.out.println(Arrays.toString(arr));
}
}

代码整理:

import java.util.Arrays;

import day05.forTest;

public class insert {
    
    
	public static void main(String[] args) {
    
    
		int[] arr = {
    
     5, 1, 17, 11, 9 };
		insertsort(arr);
	}

	public static void insertsort(int[] arr) {
    
    
		// 给insertVal找到插入的位置
		// 说明
		// 1、insertIndex >= 0 保证在给insertVal 找插入位置,只要>=0才会不断的往前挤
		// 2、insertVal <= arr[insertIndex] 待插入的数据,还没有找到插入位置
		// 3、就需要将arr[insertIndex]后移
		for (int i =1 ; i < arr.length; i++) {
    
    
			int insertVal = arr[i]; // 这是第一个数,因为第一个数默认是一个有序列表(下标为1,实际上他是第二个数)
			int insertIndex = i - 1; // 即arr[1]的前面这个数的下标(也可以看成是数组的第一个数字)
			
			while (insertIndex >= 0 && insertVal <= arr[insertIndex]) {
    
    
				arr[insertIndex + 1] = arr[insertIndex];
				insertIndex--;// 从后往前移动
			}
			// 当退出while循环时,说明插入的位置找到,insertIndex +1

			arr[insertIndex + 1] = insertVal;
			System.out.println("排序"+i+"次");
			System.out.println(Arrays.toString(arr));
		}
	}
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46457946/article/details/113183872
今日推荐