您的位置:首页 > 其它

插入排序—直接插入

2015-11-12 17:03 197 查看
关于直接插入排序,本人不再赘述概念,当初我搞懂这些也研究了很久,我希望能够用最简单的语言来说清楚这个东西

在贴代码之前,用一个例子给各位一个最直观的感受(默认从小到大排序):

现在要将16插入一个有序的序列S:5,13,20,33,插入排序的做法是让序列S从后往前和16一个一个比,找出比16小的那个数的位置,插入到这个数的后面即可

注意一点,我们找到符合条件的值是13,所以我们应该把16放在13的后面,也就是20的位置,让20和33的位置都后移一位

public static void main(String []args){
int a[] = {4,6,2,7,9,5,3,7,9,};//要排序的数组
int i, j;//很多地方都要用i,j,直接声明在这了

System.out.println("排序之前的数组为:");
System.out.println("排序之前的数组为:");
                printArr(a);//输出数组
//以下是插入排序的核心代码
for(i=1; i<a.length; i++)
{
int t = a[i];//a[i]就是要插入的元素
for(j=i-1; j>=0; j--){//从这里也可以看出,j--:倒着比,一直必到a
if(a[j]>t){
a[j+1] = a[j];//如果大于就后移一位
}
else
break;//只要一找出来这个位置就不用再找了,此时j不会执行j--
}
System.out.print("j="+j+"\t");//可以打印j证明
a[j+1] = t;//当初很长一段时间没明白这行的意思:要插入的位置,下面详细说明一下
}
System.out.println();
                System.out.println("排序之后的数组为:");
                printArr(a);
}
a[j+1] = t:要插入的位置,如果不明白这里,看下面的说明:
假设2,4,6,7,9是已完成排序的有序序列S,要将5插入,我们来写写for循环的步骤
<1> t=a[5]=5

<2> j=i-1=4-->a[4]=9>5,不是要找的插入位置,将a[4]后移以为,即a[5]=9,然后j=j-1

<3> 一直循环到a[1]=4,发现a[1]不大于5,执行else,退出内层循环

<4> 那么5应该插入到a[1+1]=a[2]的位置,在第<2>步中,比5大的都已经后移了一位了


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: