*基本思想
把n个待排序的元素分成一个有序表和一个无序表,开始时有序表中只包含一个元素(通常取第一元素),无序表n-1个元素,排序时每次从无序表中取出第一个元素,把它和有序表中的元素依次进行比较,将它插入到有序表适当的位置,形成新的有序表。
*排序特征
排序类别:插入排序
时间复杂度:O(n²)
稳定性:稳定
*适用场景
当待排序元素n比较小,元素基本有序,对稳定性有要求时,可考虑采用直接插入排序
*代码实现
public static void insertSort(int[] arr) {
int n = arr.length;
for(int i=1; i<n; i++) { //开始循环无序表
int temp = arr[i]; //每次循环取出无序表第一个元素
int j = i-1; //有序表下标,指向数组最后一个元素
while(j>=0 && temp <arr[j]) {//有序表中有元素比它大
arr[j+1] = arr[j]; //将比它大的元素后移
j--; //有序表下标前移,为下一次比较做准备
}
arr[j+1] = temp; //将它插入到合适的位置
}
}