关于插入排序,你还不懂这些吗?

package 排序算法;

import java.util.Arrays;

public class InsertSort {

	public static void main(String[] args) {
		int[] arr = new int[] {5,3,2,4,8,1,0};
		insertSort(arr);
		System.out.println(Arrays.toString(arr));
	}

	public static void insertSort(int[] arr) {
		//遍历所有的数字
		for(int i = 1;i < arr.length;i++) {
			//如果当前数字比前面数字小
			if(arr[i] < arr[i-1]) {
				int temp = arr[i];
				int j;
				//遍历当前数字前面的所有数字
				for(j = i-1 ; j>=0&&temp<arr[j];j--) {
					arr[j+1] = arr[j];	
				}
				arr[j+1] = temp;
			}			
		}
	}
}

插入排序实现原理:

int[] arr = new int []{3,2,4,8,5,2}

  1.  先从下标1 开始遍历一遍数组
  2. 如果当前数字arr[i]<arr[i-1]则表示当前数字需要交换位置
  3. 用临时数字temp储存arr[i]
  4. 然后遍历i前面的数字,如果当前数字temp<arr[j]并且下标j大于等于0
  5. 就把arr[j]向后移动一位,即arr[j+1] =arr[j]
  6. 当不满足情况时,把temp的值赋值给arr[j+1]

例如

int[] arr = new int []{3,2,4,8,5,2}

从下标1开始遍历,当前数字arr[1]<arr[0],temp=arr[1]

然后遍历下标1前面的所有数字,

j=i-1=0 ,temp<arr[j]&&j>=0,j--  把 当前数字arr[j]向后一位即arr[j+1]=arr[j]

此时j =  j--  = -1,无法与前面数字做比较,即把temp的值赋给arr[j+1]

数组变成{2,3,4,8,5,2}

然后下标2,arr[2]>arr[1]不做处理

下标3,arr[3]>arr[2]不做处理

扫描二维码关注公众号,回复: 11647187 查看本文章

下标4,arr[4]<arr[3],把arr[3]向后移一位即arr[4]=arr[3];

数组变成{2,3,4,temp,8,2}

temp>arr[2],即不用再跟换位置arr[j+1]=temp

以此类推

猜你喜欢

转载自blog.csdn.net/xmt1369758466/article/details/86519018