插入排序算法思想:和前俩种排序不同,插入排序在排序过程中是局部有序,随着插入项的增多,有序部分的项的位置会发生改变,而冒泡排序和选择排序每轮确定的项数的位置是永远不变的。在首轮,选择第二项作为插入项,然后取出这一项放在一个变量中,和前一项比较而且小,则前一项后移到第二项的位置,然后第二项也就是插入项放在前一项的位置,第二轮选择第三项作为插入项然后取出和前一项也就是第二项比较如果小,第二项后移到插入项,然后插入相在和第一项比较如果小,则第一项后移到第二项,插入项放在第一项,以此类推
public void insertSort()
{
// 定义临时变量
int temp = 0;
// 外层循环控制次数
for (int i = 1; i < array.length; i++)
{
//把插入项的数值赋值给临时变量
temp = array[i];
int j = i;
// 判断前一项是否比插入项大
while (j > 0 && array[j - 1] > temp)
{
array[j] = array[j - 1];
j--;
}
// 把插入项的数组值赋值给数组首项
array[j] = temp;
}
}
具体实例说明:
只取数组前4项进行说明,{23,63,19,8},第一次循环,i=1,j=1;array[0]<63,所以第一轮顺序不变;
第二次循环,i=2,j=2;array[1]>19,所以array[2]=63,内部继续循环,j=1;array[0]>19,所以array[1]=23,内部循环结束,array[0]=19.此时顺序为{19,23,63,8};
第三次循环,i=3,j=3;array[2]>8,所以array[3]=63,内部循环继续,i=2,j=2;array[1]>8所以array[2]=23,内部继续循环,j=1;array[0]>8,所以array[1]=19,内部循环结束,array[0]=8.此时顺序为{8,19,23,63}.