中易网

JAVA初学者问题,插入排序法,假设数组是3,2,1.请将i=2的时候代码运行过程帮我用语言描述下,谢谢。

答案:2  悬赏:40  
解决时间 2021-02-16 19:46
JAVA初学者问题,插入排序法,假设数组是3,2,1.请将i=2的时候代码运行过程帮我用语言描述下,谢谢。
最佳答案
23 1
while{
233 1
2231
}
123
看详解!
=========================================================
i=2.
在没有向下运行之前,可以知到.有序数列是 2,3,两个值,并且它们放在arr[0],arr[1]中
无序数列是1.放在arr[2]中
-------------------------------------------------
arr[0]arr[1]|| arr[2]
-------------------------------------------------
int insertVal=arr[i]=arr[2]=1;//借助变量insertVal=1."备份"了数组的第三个值
第三个值在这里确切的说是无序数组的第一个值
arr[index]=a[1]=3
while循环判断.insertVal=1<3..有序数组.0---->index .后面加一位,把放a[index]放到a[index+1]
这时候有序数组.比原来大了一号.而且最后两个数是重复的.2,3,3原来是2,3
while循环判断.insertVal=1<2.这个时候,有序数组,不增加了.而是让2后移一位.变成2,2,3
-------------------------------------------------------------------------------------------------
因为每循环以此,index都会提前去指向查找.
首先指向有序数组23中的3.经过以此循环指向2.可是它不知道前面是不是还有数字.它指向前2面的值.(这里假如2前面有个0.那么它现在指向0这个数,发现比1小).所以insertVal=1要放在下一个位置(0的下一个位置.index指向0.)所以跳出while循环后,a[index+1]=insertVal=1;
这个时候,数组变成了( 0 )1,2,3
------------------------------------
再看看当i=1的时候.
i等1.的时候,有序数组为3.一个无序数组为2,1两个
进入循环后,如果2比3大,直接跳出循环.把3放到2的下一位.也就是index+1
--------------------------------------------------------------------------------
这里明显2比3小.进行一次循环.从循环,一开始.有序数组就开始从最后一个数,和无序数组中第一个数拿出当中间值的数进行对比,也就是2先和3对比.2比3小.index接着往前走.并且有序数组最后一个数后移一位.也就是由3变成3,3.index指向两个3前面的值.这时候发现条件不适合.
跳出循环.让出现空缺的地方,填补上这个insertVal=2.
===================================================
---------------------------------------------------------------------------------数据量小的时候看着别扭
===================================================
现在有654321留个数.放在数组中.
---------------------------------------------------------------
第一次循环.(这里指的是外循环)
6 54321
while{
6 654321(而在事实中,5被传给了中间值,有序数组增大一,实际上6占用了5的位置)
}
56 4321
-----------------------------------------------------------------------
第二次循环.(这里指的是外循环)
56 4321
while{
5664321
5564321
}
456 321
-----------------------------------------------------------------------
第三次循环.(这里指的是外循环)
456 321
while{
4566 321
4556 321
4456321
}
3456 21
-----------------------------------------------------------------------
第四次循环.(这里指的是外循环)
3456 21
while{
34566 21
34556 21
3445621
33456 21(别忘记,2的位置体检传递给了中间值.实际上2的位置被6占了.所以数组大小并没有变)
}
3456 21
-----------------------------------------------------------------------
第五次循环.(这里指的是外循环)
23456 1
while{
234566 1
234556 1
2344561
233456 1(别忘记,1的位置体检传递给了中间值.实际上1的位置被6占了.所以数组大小并没有变)
2234561
}
123456
-----------------------------------------------------------------------
插入排序的突破点实际上就在于中间值,和这个"指针"index
如果将index与i的值的关系分开.可能就很容易了
i干扰了思维!
-----------------------------------------------------------------
实际上index的初始值,就是有序数列的最后一个数组索引
i的值就是无序数列的第一个索引.
拿出无序数列的第一个索引值,与有序数列的最后一个值,从尾到头一个一个对比.发现合条件
就放到哪里.
从一开始.无序数列就自己给自己先削了一个"头".而有序数列无论在内循环开始,还是没有进入内循环.就直接把自己的"势力"扩张了一个位置.
.无序数列的头.如果比有序数列所有的值都大,就直接放到刚刚"扩大"那一个位置
如果不确定,那就从有序数列的最后一个位置(实际上有序数列扩大了一个位置,应该算式倒数第二个才对)一直往前对比.凡是比他"大"的都往后移动一位,最后将它放到"中间位置"
全部回答
整形变量insertVal 是下标是i的元素的值,arr[index]是下标是i-1的下标的值。
while条件里,判断index是否大于等于0就是判断下标是i的元素前边是否还有元素,有元素的话,判断下标是i元素的值----insertVal和下标是i-1-----index的元素(即下标是i的元素的前一个元素)的值的大小,如果后边的大于前边的,则前后的值进行交换。如果不大于,在比较下标是i的元素的值和下标是i-2---index-1的元素的值,依次类推。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
昆明到湛江需要多长时间?
如果有人说你整容,你很生气你会怎么骂他?
红梨适合什么条件种植
形容站在远方看山的词语
永王村地址在什么地方,想过去办事
如何在DB2里面将表以依赖关系进行排序
重庆市高优园林绿化工程有限公司地址在什么地
索尼Sony索尼/KDL-55R580C索尼高清液晶电视机
根据短文内容回答问题。 How can we learn En
NSK P205轴承座配套轴承是什么型号
现在500G全新机械硬盘一般多少钱?
帅康电器地址在哪,我要去那里办事
五桂镇这个地址在什么地方,我要处理点事
索尼nwz-e464与nwz-474的区别
dhl快递费怎么计算
推荐资讯
北京到颍上县的大巴车在哪做
王源有没有对像?
请问广州大型品牌超市商场有多少个
乖乖童装店地址有知道的么?有点事想过去
中国游戏方面为什么垃圾?除了山寨,连一个PS
3米28厘米=()米
八步的电话区号是什么?
安平县的丝网厂哪些比较好?
客厅跟卧室用什么颜色的地砖好看?墙是白色的
厨刀什么牌子好?
"萱庭集庆"什么意思?
这两个音符是什么意思
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?