浅谈八大排序算法之插入排序

所谓插入排序,就是将整个数组看成已排序好的部分,和未排序的部分,第一次的时候我们将数组额的第一个数看做已经排序好的序列,第一个数往后都是没有排序的序列,然后依次将没排序的数在已经排好序的系列中找到相应的位置上,使其再次成为排好序的序列,以此类推,直到为最后一个数找到相应的位置。

在这里插入图片描述
话不多说直接上代码:
插入排序算法有两种方式,第一种为交换插入法,第二种为移位插入法
我们先看第一种:(交换插入法)

public static void insertSort(int[] arr) {
	// 第一个数视为已排好序列  从第二个数开始 找位置
		for (int i = 1; i < arr.length; i++) {
		// 保存变量
			int j = i;
		// 循环为要插入的数找到位置
			while (j > 0) {
			// 如果再循环的过程中 要插入的数小于前面的数  则交换
				if (arr[j - 1] > arr[j]) {
					int temp = arr[j - 1];
					arr[j - 1] = arr[j];
					arr[j] = temp;
				}
				// 改变位置继续
				j--;
			}
		}
	}

第二种方式(移动插入法)

public static void insertSort(int[] arr) {
		for (int i = 1; i < arr.length; i++) {
		// 设置变量保存要插入数的前一个数的位置
			int j = i - 1;
			// 保存要插入的数
			int temp = arr[i];
			// 循环找位置  当有一个数比要插入数大时  进入循环
			while (j >= 0 && arr[j] > temp) {
			// 将稍大的数 后移一位
				arr[j + 1] = arr[j];
				j--;
			}
			// 当退出循环时 j + 1 才是最终的位置 
			// 举一个例子便知道 当我们要插入的数 比前面任何数都要大时 我们就不用进入循环
			// 此时j = i - 1  因为要执行下面这条语句 所以j + 1 才为正确的位置
			arr[j + 1] = temp;
		}
	}

本次就到这里

猜你喜欢

转载自blog.csdn.net/weixin_44112559/article/details/98954961