算法思想:
插入排序的算法思想应该是最容易理解的,打过扑克或者麻将的人一看就懂。就是将数按照大小插入到对应的位置。
算法特点:
- 每趟排序不进行数据交换,只是进行数据的移动;
- 稳定排序。
/**
* 插入排序:会打扑克牌的都能懂
*/
public class InsertSort {
public static void insertSort(int[] arr) {
int len = arr.length;
for (int i = 1; i < len; i++) {
// i是未排序区域第一个元素的下标
// value保存未排序区域第一个元素的值
int value = arr[i];
// j初始值为排序区域中最后一个元素的下标
int j = i - 1;
for (; j >= 0 && arr[j] > value; j--) {
arr[j + 1] = arr[j];
}
arr[j + 1] = value;
}
}
}
优化思路1:可以用二分折半查找来快速查找到应该插入的位置,然后再进行插入操作。
优化思路2:希尔排序