插入排序算法介绍

图解部分:

代码部分:

package com.dl;

import java.util.Arrays;

public class InsertSortTest {
	public static void main(String[] args) {
		int[] array = {1,3,2,8,4,5};
		
		insertSort(array);
	}
	
	
	/**
	 * 插入排序
	 * 思想:将数组的第一个元素看成有序的一个表,后面的元素堪称一个无序的。
	 *     然后,将后面的元素元素依次插入到前面
	 * 这里以从小到大排序为例子
	 * @param array
	 */
	public static void insertSort(int[] array) {
		int insertValue = 0;
		int beforeIndex = 0;
		for(int i = 0;i<array.length-1;i++) {
			//第一步:先保存待插入的数据
			insertValue = array[i+1];
			//第二步:保存待插入数据的前一个位置的索引。
			beforeIndex = i;
			//第三步:将待插入的数据,逐一和前面的数据进行大小的比较,然后找到其应该在的位置
			//解释:beforeIndex >= 0 是为了防止数组下标越界
			//    insertValue < array[beforeIndex] 是为了判断待插入的数据和前面数据的大小
			while(beforeIndex >= 0 && insertValue < array[beforeIndex]) {
				//如果能够进入while循环,则表明,待插入数据小于前面的数据,则需要把前面的数据向后移动
				array[beforeIndex+1] = array[beforeIndex];
				//然后将索引自减,目的是为了拿待插入的数据,继续和前面的数据进行比较
				beforeIndex--;
			}
			//第四步:while循环结束后,说明位置已经找到,则需要把待插入的数据插入到指定的位置
			//当然这里可以判断一下是否需要赋值,注意:如果待插入数据的原先的位置就是需要插入的位置,则不需要赋值
			if(beforeIndex+1 != i) {
				
				array[beforeIndex+1] = insertValue;
			}
			//第五步:打印数组:
			System.out.println("第"+(i+1)+"次排序:"+Arrays.toString(array));
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_45634682/article/details/112694202