插入排序
public static void main(String[] args){
//插入排序
/**
* 排序值列中的前2个值,并在必要时交换它们。在相对于前2个值(有序的)的适当位置插入值列的第三个值。
* 然后,在相对于前3个值(有序的)的适当位置插入值列的第4个值。每进行一次插入操作,有序子集中的数值个数将递增1。
* 重复该过程,直至值列中的所有值都按照次序排列为止。插入过程需要移动数组中的其他值,为插入的元素腾出存储空间。
*/
int[] b = {23,90,9,25,16};
insertSort(b);
for(int i = 0; i < b.length; i++)
System.out.print(b[i] + " , ");
}
public static void insertSort(int[] a){
int j;
for(int p = 1; p < a.length; p++){
int temp = a[p];
for(j = p; (j > 0) && (temp < a[j-1]);j--){
a[j] = a[j-1];
}
a[j] = temp;
}
/**
*
* 外层第一次循环p=1,取得数组中的第二个数90,赋值给临时变量temp,内层循环j的初始值为p也就是1,
* 所以j大于0满足内层循环的第一个条件,而temp的值为90,a[j-1] 等价于a[1-1] ==> a[0]的值为23,也就是90大于23,
* 第二个条件不满足不会进入循环体,最后把temp的值赋值给a[j],也就是a[j] = temp ==> a[1] = 90,
* 第一轮循环第二个元素的值没有改变, 数组仍为:23,90,9,25,16
*
* 外层第二次循环p=2,取得数组中的第三个数9,赋值给临时变量temp,内层循环j的初始值为p也就是2,
* 所以j大于0满足内层循环的第一个条件,而temp的值为9,a[j-1] 等价于a[2-1] 此时 a[1]的值为90,也就是9小于90,
* 第二个条件满足进入内循环体,交换:把数组的第二个元素赋值给第三个元素,也就是90放到了数组的第三个元素。
* 紧接着j--,j的值变为1,再来看内层循环第二次循环的条件是否满足:j>0满足,temp < a[j-1] ==> temp < a[0] ==> 9< 23 满足
* 第二次进入内层循环,a[j] = a[j-1] ==> a[1] = a[0] ==> a[0]为23 把23放到了数组第二个元素的位置,
* 再次j-- ,j的值变了0,内层循环条件不满足,执行外层循环a[j] = temp语句,
* 因为j此时已经变为0,a[j]就是a[0],把9放到数组的第一个元素的位置
* 所以外层循环第二轮的结果为:9,23,90,25,16
*
* 然后外层进入第三次循环...
*/
}