一、算法描述
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
- 从第一个元素开始,该元素可以认为已经被排序;
- 取出下一个元素,在已经排序的元素序列中从后向前扫描;
- 如果该元素(已排序)大于新元素,将该元素移到下一位置;
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
- 将新元素插入到该位置后;
- 重复步骤2~5。
二、举例说明
三、代码
public class InsertionSort {
public static void main(String[] args) {
int[] arr = {1, 3, 2, 10, 7, 34, 23, 234};
insertSort(arr);
for (int a = 0; a < arr.length; a++) {
System.out.println(arr[a]);
}
}
public static void insertSort(int[] array){
for (int i=0;i<array.length-1;i++){
int inserVal = array[i+1];
int insertIndex = i;
inserVal = array[i+1];
while (insertIndex >=0 && inserVal<array[insertIndex]){
array[insertIndex+1] = array[insertIndex];
insertIndex--;
}
array[insertIndex+1] = inserVal;
}
}
}
四、时间复杂度
最佳情况:T(n) = O(n) 最坏情况:T(n) = O(n2) 平均情况:T(n) = O(n2)