直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。
算法图解:
代码实现(Java):
public class InsertSort {
public static void main(String[] args) {
int[] arr = {101,34,119,1};
insertSort(arr);
}
//插入排序
public static void insertSort(int[] arr) {
//使用for循环简化代码
for (int i = 1; i < arr.length; i++) {
//定义待插入的数
int insertVal = arr[i];
int insertIndex = i - 1;
//给insertVal找到插入的位置
while (insertIndex >= 0 && insertVal < arr[insertIndex]) {
arr[insertIndex + 1] = arr[insertIndex];
insertIndex--;
}
//当退出while循环时,说明插入的位置找到
//这里判断是否需要赋值
if (insertIndex + 1 != i){
arr[insertIndex + 1] = insertVal;
}
}
}
}
时间复杂度:O(n²) 但是比冒泡和简单选择排序性能要好一些。