插入排序
大家好,小范来为大家解答以上的问题。插入排序这个很多人还不知道,现在让我们一起来看看吧!
1、插入排序(insertion sort)如果需要对一个小型数组进行升序排列,那么可以选用插入排序,插入排序可以用打牌时对摸起的牌根据牌的点数来对其进行插入排列来描述。
2、可以把左手中的牌比做已经摸起的牌,即已经被排列好的牌,左手可以容纳的牌数的空间可以假想为和要摸的牌的总数相同;而在桌子上的那部分没摸的牌则是未被排序的牌,这二者的关系可以抽象为数组中已经被排序好的部分和未被排序好的部分。
3、一开始摸起的第一张牌不需要排序,可以认定其为已排序的牌。
4、如果用外层循环for来表示摸起的牌的话,则可以抽象为:// 对象数组// 桌子上的牌int A[] = {5,1,3,6,2,4};// 从数组的第二个元素开始抽取for(int i = 1; i < sizeof A/sizeof A[0]; ++i){int pick = A[i]; // 被摸起的牌int j = i - 1; // j记录已排序部分的最后一张牌的位置. . .}而后摸起的排要根据排列策略和先前摸起的牌的点数的大小来确定其插入的合适位置,这里示范的排列策略是升序排列,摸起了这张牌后,便自右向左地和手中的牌进行比较。
5、把pick称作摸起的牌,如果pick比手中的牌小,则手中较大的那张牌就向右挪一位,pick再和下一张牌做比较,如果下一张牌仍然比pick大,那么那张牌便也向右移动一个位置,依此类推。
6、如果手中下一张和pick比较的牌比pick小,那么pick就被插入在了手中前一张牌移动后空下的位置;或者手中所有的牌都比pick大,那么所有的牌就都向右移动过一个位置,所以pick最终被插入在了手中最左边的位置。
7、这个过程可以抽象为:// 对象数组// 桌子上的牌int A[] = {5,1,3,6,2,4};// 从数组的第二个元素开始抽取for(int i = 1; i < sizeof A/sizeof A[0]; ++i){int pick = A[i]; // 被摸起的牌int j = i - 1; // j记录已排序部分的最后一张牌的位置// 如果循环了j+1次,即j = -1时还未找到比pick小的牌// 那么pick就是最小的牌被插入在位置A[0]处// A[j]是当前手中和pick进行比较的牌while(j >= 0 && A[j] > pick){// 未找到可插入位置,则A[j]向后挪一位A[j+1] = A[j];// j减1继续向左定位手中下一张供和pick比较的牌--j;}// while结束后,j+1所表达的位置便是pick可以插入的位置A[j+1] = pick;}// 对于有N个元素的数组A,采用插入排序法排序时,当外层循环进行了N-1次后排序完毕for(i=1;i<4;i++) //外层{ t=a[i]; for( j=i-1 ; j>=0 && t>a[j] ; j-- ) //内层 a[j+1]=a[j]; a[j+1]=t; } 你要理解插入排序的原理,外层for从第二个数开始遍历(i从1开始),用t(即对应的a[i])和其前面的所有值进行比较,如果t大,则该数后移一位,直到t小或者j小于0的时候退出内层for循环,这时候出现的格局就是所有在i位置之前比a[i]小的值全部后移了一位,退出循环时就会空出一个位置来。
8、举个例子:输入:1 3 2 4第一次循环时,t=a[1]=3,t>a[0],所以a[0]后移一位(即:a[j+1]=a[j] -> a[1]=a[0]),之后出现结果:1124,这时候实际上0位置是给此时的t预留的位置,内层for执行完毕后,执行:a[j+1]=t 正好弥补这个空缺。
9、结果:3124第二次循环时,j=1,t=a[2]=2,t>a[1],所以a[1]后移一位:a[2]=a[1],之后结果:3114,在比较t和a[0],t小,跳出内层for,跳出时j为0,执行:a[1]=t=2,结果:3214 下面就不讲了,从上面可以看出,你说的那一句,至关重要,外层for每循环一次就插入一位数据,而a[j+1]=t,就是完成插入的最后一步。
本文到此分享完毕,希望对大家有所帮助。
免责声明:本文由用户上传,与本网站立场无关。财经信息仅供读者参考,并不构成投资建议。投资者据此操作,风险自担。 如有侵权请联系删除!
-
“倾城一笑百眉生”是一句形容女性美貌的诗句,其中暗含了生肖解谜的趣味。要通过这句话推导出对应的生肖动物...浏览全文>>
-
“喂饭”与生肖的关联可以通过谐音或象征意义来解读。在中国传统文化中,“喂饭”可以联想到“犬”这个生肖,...浏览全文>>
-
“一人之下,万人之上,将军威权千里雄”这句诗描述了一种威严与权力的象征,结合生肖文化,最贴合的生肖是龙...浏览全文>>
-
这个谜语“月圆入圆家团圆,一六连结来相帮”描述了一个温馨和谐的画面,结合生肖的特点,答案是狗。诗意解读...浏览全文>>
-
“不知所措,心乱如麻。始信劲草胜娇花”这句描述中,“劲草”和“娇花”都具有象征意义。“劲草”坚韧不拔,...浏览全文>>
-
“假情假意”并不是直接与生肖相关联的成语,但它可以被用来形容某些生肖的性格特点或行为表现。以下从诗意的...浏览全文>>
-
按劳分配是中国社会主义初级阶段个人收入分配的基本原则之一,强调根据劳动者提供的劳动数量和质量来决定其所...浏览全文>>
-
“按劳分配”出自社会主义分配原则,意指根据个人付出的劳动量来决定所得报酬。结合生肖数字,“按劳分配”可...浏览全文>>
-
“海阔天空”是一个充满自由与广阔意境的成语,它象征着无拘无束、胸怀宽广的精神状态。结合生肖文化,这一成...浏览全文>>
-
“放虎归山”是一则成语,意思是将老虎放回山林,比喻把坏人或敌人放回去,可能会造成更大的危害。而将其作为...浏览全文>>
- 放虎归山打一动物生肖说的是什么动物,经典解答落实
- 望天而啼,天地清明。九微片片飞花开打一个生肖数字,第一解析落实
- 亡羊补牢打一生肖数字数字,已答解释落实
- 力壓羣雄,谁敢张狂?群雌粥粥尽仰望是什么生肖打一生肖动物精选解释解析落
- 试驾雷克萨斯LX,从预约到试驾的完美旅程
- 奥迪SQ5 Sportback预约试驾,线上+线下操作指南
- 试驾五菱凯捷有哪些途径
- MINI试驾,线上+线下操作指南
- 蒙迪欧试驾预约,4S店体验全攻略
- 大运悦虎试驾预约怎么预约
- AION S试驾,如何在4S店快速预约?
- 广汽传祺传祺向往M8试驾的流程是什么
- 长安欧尚520试驾预约操作指南
- 踏青归来马蹄香,一八追忆二难忘代表什么生肖,精准快答揭晓落实
- 半壁江山打一个正确的生肖,作答解释落实
- 屈指可数指什么生肖,科学答案落实
- 名冠古今世间稀打一个生肖,刚刚全面解释落实
- 未曾得向行人道打一个生肖打一种生肖,完美释义落实
- 阳春白雪打一个生肖,第一析释落实
- 灵蛇鼠洞一湖天是什么生肖打一动物精选最佳资料落实