从数组第一位遍历开始,每次取一位数往开始遍历的方向比较,如果该数小于被比较的数则将被比较的数往后移一位,如果大于则插入该位置
最好时间复杂度O(n),最坏时间复杂度O(n*n),平均时间复杂度O(n*n),空间复杂度O(1)
public void test(){
int[] arr = {12,2,1,43,54,23,45,45,22,32};
int tem = 0; //暂存当次选取的值,即arr[i]
//第一层循环是根据数组长度决定要执行多少次内层循环,这里从0开始没有意义,直接从1开始,比较前两位
for (int i = 1; i < arr.length; i++) {
tem = arr[i];
//第二层循环,这里是从当前位置往开始的方向逐个比较
for (int j = i-1; j >= 0; j--) {
//tem小于arr[j]arr[j]往后移一位
if (tem < arr[j]){
arr[j+1] = arr[j];
if (j == 0){ //j已经到了数组的第一位,将tem放在第一位
arr[j] = tem;
}
}else{ //否则,直接插入arr[j+1]
arr[j+1] = tem;
break;
}
}
}
}