插入排序
原理
1.将所有的元素分为两组,已经排序的和未排序的;
2.依次遍历未排序中的每个元素,将其向已经排序的组中进行插入;
3.倒叙遍历已经排序的元素,依次和待插入的元素进行比较,直到找到一个元素小于等于待插入的元素,将这个待插入的元素放到这个位置,其他的元素向后移动一位。
package sort;
import java.util.Arrays;
public class InsertSort {
public static void main(String[] args) {
int[] arr = new int[]{1,23,34,2,34};
insertCode(arr);
System.out.println(Arrays.toString(arr));
}
public static void insertCode(int[] array) {
for (int i = 1;i < array.length;i++) {
for (int j = i;j > 0;j--) {
if (array[j] < array[j-1]) {
int tmp = array[j];
array[j] = array[j-1];
array[j-1] = tmp;
}
}
}
}
}
时间复杂度分析
使用双层for循环,分析内层循环的执行次数:
最坏情况下:
比较次数为:(n-1)+(n-2)+...+2+1=n^2/2-n/2
交换次数为:(n-1)+(n-2)+...+2+1=n^2/2-n/2
总执行次数为:n^2/2-n/2+n^2/2-n/2=n^2-n
即最终插入排序的时间复杂度:O(n^2)