简单插入排序:插入排序属于稳定排序算法,有简单插入排序,二分插入排序,希尔排序。这里是简单插入排序,每次从后面未排序元素中取出一个元素插入到前面已经有序的序列中去。其时间复杂度为O(n 2).
最好情况是,数组已经有序,比较n-1次,复杂度为O(n),最坏情况是,数组逆序,比较n(n-1)/2次,移动了(n+2)(n-2)/2次, 平均情况移动次数为n^2/4,故直接插入排序的时间复杂度为O(n^2)。
- 直接插入排序法比冒泡和简单选择排序的性能要好一些。
package yoozoo.day1;
public class Test9 {
/*
* 每次都拿出一个元素与插入到前面已经有序的序列中去,复杂度为O(n2)
* 属于稳定的排序算法,其有简单插入排序和希尔排序,二分插入排序
* */
public static void main(String[] args) {
// 简单插入排序
int[] arr = { 1, 4, 2, 8, 12, 9 };
int[] res =insertSort(arr);
for(int t = 0 ;t < res.length ; t++){
System.out.println(res[t]);
}
}
private static int[] insertSort(int[] arr) {
if (arr == null || arr.length < 2) {
return arr;
}
for (int i = 1; i < arr.length; i++) {
for (int j = i; j > 0; j--) {
if (arr[j] < arr[j - 1]) {
int temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
} else {
// 接下来是无用功
break;
}
}
}
return arr;
}
}