1.思路:
n个数排序,依次取出第二到第n个数作为待插入数,向前比较,如果比前面数字大,将前面数字后移,直至将待插入数字插入到合适的位置。
2.图片示例:
3.代码示例:
package sort;
import java.util.Arrays;
/**
* 插入排序
*/
public class Insertion {
public static void main(String[] args) {
int[] arr1 = {44,38,5,47,15,31,32,88,2,23,43,54,1,7,56,100,101,102};
insertion(arr1);
}
/**
* 第一趟,取第二个数38为待插入值,向左比较,比第一个数字44小,将第一个数字右移,将待插入值38插入到第一个位置
* 第二趟,取第三个数5为待插入值,向左比较,比第二个数(38)和第一个数(44)小,将38和44右移,将5插入到第一个位置
* .
* .
* .
* 第n-1趟,取第n个数为待插入值,依次向左比较,找到目标位置,将二者之间数字依次右移,将待插入值插入到目标位置
* @param arr
*/
public static void insertion(int[] arr) {
int swapCount=0;
int compareCount=0;
for(int i=1;i<arr.length;i++) {
int insertValue=arr[i];
int index=i;
while(index>=1&&insertValue<arr[index-1]) {
arr[index]=arr[index-1];
index--;
swapCount++;
}
compareCount++;
arr[index]=insertValue;
}
System.out.println(Arrays.toString(arr));
System.out.println(String.format("交换%d次", swapCount));
System.out.println(String.format("比较%d次", compareCount));
}
}