1、概述
插入排序思想:对一个未排序的数组来说,将第一值当做已经被排好序的数组,然后从第二个值开始循环向前面排好序的数组进行比较插入。比较的顺序是从被排好序的数组的最后向前比较。
2、图解示例

观察可得:
- 对数组排序需要进行 length - 1 轮遍历,并且将数组第一个值当做已经排好序的数组,从第二个值开始进行插入。
- 每轮开始比较的位置为要插入的数据的下标 - 1。
- 进行插入时:
- 如果要插入的数据小于被比较的数据时,就将被比较的数据向后移一位,然后将被比较的下标 - 1,进行下轮的比较。
- 如果下标 - 1已经超过了0,那说明要插入的数据为最小值,即插入到第一位。
- 如果要插入的数据大于被比较的数据时,就将要插入的数据插入到被比较的数据后一位。
3、代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| package com.ld.algorithm.sort;
import java.util.Arrays;
public class InsertSort {
public static void main(String[] args){
int[] array = {29,10,-3,90,3};
System.out.println("排序前:" + Arrays.toString(array));
int[] sortArray = sort(array);
System.out.println("排序后:" + Arrays.toString(sortArray)); }
public static int[] sort(int[] array){
for(int i = 1; i < array.length; i++){ int insertVal = array[i]; int startIndex = i - 1;
while(startIndex >= 0 && insertVal < array[startIndex]){ array[startIndex + 1] = array[startIndex]; startIndex--; }
array[startIndex + 1] = insertVal; } return array; } }
|