插入排序的理解:
给定一个数组 a[5] = {3,1,2,4,5}
第一步:
初始情况是,a[0]作为已排序组,其它元素作为未排序组;
选择a[1]和a[0]比较,a[1] < a[0],故a[1]排在a[0]的左边;
用临时变量temp = a[1],再将a[0]移到a[1]的位置上,a[1] = a[0];
第二步:
此时1,3是已排序组,2,4,5是未排序组;
选择a[2]和已排序组中的a[1]比较,a[2] < a[1],故a[2]要排在a[1]的左边;
但是并不清楚,a[2]和a[0]的大小,所以仍需比较a[2]和a[0],a[2] > a[0],故a[2]排再a[0]的右边;
第三步:
此时1,2,3是已排序组,4,5是未排序组
选择a[3]和a[2]比较,a[3] > a[2],故a[3]排在a[2]的右边;
再选择a[4]和a[3]比较,同样在右边
最后结果1,2,3,4,5
实现代码如下:
public class Insert{
public static void main(String[ ] args){
int[ ] a = {3,1,2,4,5};
for(int i = 1;i<5;i++){ //i是未排序组的第一个元素下标
int j = i-1; //j是已排序组的最后一个元素下标
temp = a[i]; //用临时变量temp保存待插入的数
while(j>=0 && a[j]>temp){ //因为要和所有的已排序好的元素比较,所以要有循环,直到j为0
a[j+1] = a[j]; //待插入的数较小,则先把大的数向后移动一个,
//直到temp大于已排序好的数中的某一个,
//若a[j]<temp,则把temp插在a[j+1]的位置上
j--;
}
a[j+1] = temp; //若a[j]<temp,则把temp插在a[j+1]的位置上
}
}
}