import java.util.Arrays;
/**
* 插入排序
* 选择未排序位置的数据,插入到数组已排序好的前半本部分
* 遍历该部分,进行插入,然后将后继节点往后移一位
*/
public class InsertSort {
public int[] insertSort(int[] arrays){
if(null == arrays){
throw new NullPointerException("arrays is null");
}
if(!(arrays.length>0)){
return arrays;
}
int[] sortArrays = Arrays.copyOf(arrays, arrays.length);
sort(sortArrays);
return sortArrays;
}
private void sort(int[] arrays){
int len = arrays.length;
//i=0的位置默认是已经排序的,因为1个数组如何比较都是有序的
//故i从1开始进行插入排序
for(int i = 1;i<len;i++){
//拿到需要插入的值
int sortNum = arrays[i];
//找到需要插入的位置
int insertNum = i;
for(int x = 0;x<=i;x++){
if(arrays[x]>sortNum){
insertNum = x;
break;
}
}
//将插入位置的值与后继节点向后移1位
//为插入的值腾出位置
for(int j = i;j>insertNum;j--){
arrays[j] = arrays[j-1];
}
//进行值的插入
arrays[insertNum] = sortNum;
}
}
public void println(int [] a) {
for(int x:a) {
System.out.print(" "+x);
}
System.out.println("");
}
public static void main(String[] args) {
int [] array = {9,3,4,12,8,5,6,2,0,11};
InsertSort insertSort = new InsertSort();
insertSort.println(array);
insertSort.println(insertSort.insertSort(array));
}
}
优化:二分插入排序