/**
* 普通插入排序
* @param arr
* @return
*/
private static int[] insertSort(int[] arr){
int length = arr.length;
for(int i = 1; i < length; i++)
for(int j = i; j > 0 && arr[j] < arr[j - 1]; j--){
int temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
return arr;
}
/**
* 优化插入排序
* @param arr
* @return
*/
private static int[] insertSort_2(int[] arr){
int length = arr.length;
for(int i = 1; i < length; i++){
int j = i;
int temp = arr[j];
for(; j > 0 && temp < arr[j - 1]; j--){
arr[j] = arr[j - 1];
}
arr[j] = temp;
}
return arr;
}
//上面两个插入算法都是差不多的,不同点在于交换赋值的地方.优化的插入排序是找到插入的位置再插入数据,没找到之前只是右移。普通插入排序每次都要比较交换直到找到插入位置为止。
//普通插入算法,每次插入都需要3n次赋值
//而优化后的插入算法,每次插入只需要n+3次赋值
//在排序数目不大时,两者的运行效率的区别不会很大,但是大数目的插入排序,优化后的插入排序就会比普通插入排序提供3倍左右。
//当然其他的排序有的是比优化后的插入排序是效率更高的。
对插入排序的简单优化,如果有错误和问题请多多指教多多包涵!