1.插入排序原理
插入排序其实就是拿未排序数组中的第一个值,插入到已排序完中的数组的合适位置,来完成排序
图中的黄色部分为我们已经排好序的数组部分
图中的红色部分为未排好序数组中的第一个值
图中的蓝色部分为未排序的数组部分
2.实现思路
1.我们开始默认数组的第一个元素为已经排好序的数组,整个数组为A
2.未排序数组中的第一个元素拿出来,我们假设下标为n,与排序数组的第i个比较
如果该数组A[n]<A[i],则该元素位于i+1这个下标位置,相当于这个将大的数向后移动一位,然后重复2操作
否则i--;
表述的不是很清楚,代码如下
/**
* 插入排序
* @param arr
* @return
*/
public static int[] insertionSort(int[] arr){
int length = arr.length;
for(int i = 1;i < length;i++){
//排好序的最后一个索引位置
int preIndex = i-1;
//未排序的第一个位置元素,当前值
int currentVal = arr[i];
//当preIndex大于等于0并且preIndex的位置元素大于未排序的第一个位置
while (preIndex>=0&&arr[preIndex]>currentVal){
//将preIndex的元素向后移动一位
arr[preIndex+1] = arr[preIndex];
//继续向前寻找
preIndex--;
}
//因为preIndex的元素一定是小于currentVal,所以将preIndex+1赋值currentVal
arr[preIndex+1] = currentVal;
}
System.out.print(Arrays.toString(arr));
return arr;
}