插入排序
算法描述:插入排序的思想是假设待排序元素前面的元素已经是排好序的状态,然后从右至左找到该元素插入的位置,在寻找插入点的过程中将该元素前面的元素逐个平移到后一个位置,避免了交换。
算法时间复杂度:最好情况:当数据以及排好序的情况下:O(N);最坏情况:O(N^2);平均情况:O(N^2)
算法空间复杂度:O(1)
算法稳定性:算法不存在前面元素与后面元素的交换,采用逐个平移的方式,因此该算法是稳定的。
算法实现:插入排序InsertSort的实现如下:
/**
* 插入排序
*
* @author limin
* @date 2020/11/15
*/
public class InsertSort {
public static void insertSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
int insertIndex;
int insertValue;
for (int i = 1; i < arr.length; i++) {
insertIndex = i - 1;
insertValue = arr[i];
while (insertIndex >= 0 && arr[insertIndex] > insertValue) {
arr[insertIndex + 1] = arr[insertIndex];
insertIndex--;
}
arr[insertIndex + 1] = insertValue;
}
}
}