其他分享
首页 > 其他分享> > 8、插入排序

8、插入排序

作者:互联网

插入排序

一、思路分析

将序列看成是两个列表,左边看做有序列表,右边看作无序列表,刚开始有序列表只包含一个元素arr[0],无序列表包含剩余元素arr[1]~arr[n-1];第一趟排序后将无序列表的第一个元素arr[1]合并到有序列表中,有序列表变成(arr[0], arr[1])或者是(arr[1], arr[0]),无序列表包含剩余元素arr[2]~arr[n-1];第二趟排序将无序列表的第一个元素arr[2]合并到有序列表,有序列表变为(arr[1], arr[0],arr[2]),无序列表包含剩余元素arr[3]~arr[n-1],以此类推,直到所有元素都保持有序。

二、图解

在这里插入图片描述
()内是有序序列。

三、代码

package com.recorsion;

import java.util.Arrays;

public class InsertSort {
	public static void main(String[] args) {
		int[] arr = {5,-3,2,4};
		insertSort(arr);
		System.out.println(Arrays.toString(arr));
	}
	
	/**
	 * 插入排序
	 * @param arr
	 */
	public static void insertSort(int[] arr) {
		for (int i = 0; i < arr.length - 1; i++) { // 总共需要选择arr.length-1趟
			// 确定待插入的数据
			int insertVal = arr[i + 1];
			// 事先默认待插入数据的位置
			int insertIndex = i;
			// 下面这个循环用于查找正确的待插入数据的位置
			while (insertIndex >= 0 && insertVal < arr[insertIndex]) { 
				// 条件满足,说明需要将有序列表中的数据后移,给待插入数据腾出位置
				// 后移
				arr[insertIndex + 1] = arr[insertIndex];
				// 查找下一个位置是否满足
				insertIndex--;
			}
			// 将待插入数据放入有序列表中
			arr[insertIndex + 1] = insertVal;
		}
	}
}

标签:arr,序列表,int,插入排序,insertIndex,列表,无序
来源: https://blog.csdn.net/Chaixf8/article/details/114298581