(资料图)
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,就是完成插入的最后一步。
本文到此分享完毕,希望对大家有所帮助。
标签:
1、插入排序(insertionsort)如果需要对一个小型数组进行升序排列,那么可以选用插入排序,插入排序可以用打牌
大家好,小乐来为大家解答以上的问题。人乳如何解冻急用,乳图(急)这个很多人还不知道,现在让我们一起来看看
美国信用评级被置于“可降级审查”之列(资料图)海外网5月6日电据路透社5日报道,欧洲评级机构ScopeRatings将
安国市半程马拉松比赛正在招募官方配速员,小编整理了本次报名将会提供的福利待遇,详见正文。
2015年,日本一家保险企业,公布了“最佳名人夫妇”评选结果。结婚35周年,即“珊瑚婚”的三浦友和山口...
交易商品牌 产地交货地最新报价N-甲基吡咯烷酮 电子级200kg 桶山东宇硕化工有限公司进口山东省 济南市1770
祖国召唤时,我们正青春。CCTV-7国防军事频道推出特别节目《青春与青春对话》,来自海军航母部队的朱悦萌、
中国质量新闻网讯为提升企业知识产权创造、保护和运用水平,服务企业高质量发展,近日,江苏省扬州市江都区
韩华建材2022年净利2039 89万同比扭亏为盈原材料价格下降2023 5 611:18:57挖贝网白杨树挖贝网5月6日,韩华建材(834323
第七史诗克劳乌强度怎么样第七史诗克劳乌玩法攻略,
电源连接器有哪些股票?电源连接器概念股票一览,博威合金(601137):博威合金(601137)跌3 52%,报14 250
(向一鹏)5月5日,第三届怀商大会暨怀化市“湘商回归”恳谈会在怀化举行,230多位企业家和各界宾朋齐聚,...
微软再次因Microsoft365Outlook和Teams应用程序的新变化而引起用户的愤怒。以前在这些应用程序中,点击一个
中超第5轮比赛,申花主场1-0战胜大连人,目前4胜1平保持不败。赛后,澎湃新闻网以“‘吴’懈可击”为题...
新华社香港5月5日电(记者郑欣)记者5日从香港金融管理局获悉,“北向互换通”下的交易将于2023年5月15日...
和PS5可以拆机自行更换硬盘不同的是,微软的Xbox Series提供了完全不同的扩容解决方案,玩家可以选购由希捷
1、喜欢的话请响铃在8月22日开播。2、喜欢的话请响铃也翻译为恋爱铃,这部剧讲述在高科技的手机APP,只要身
沉浸式体验氛围拉满
你的志玲姐姐突然出现时隔半年,林志玲再次参加商业活动。这件衣服是不是有点眼熟?之前林志玲婚宴AfterPar
1、打开中国邮政储蓄银行网上银行,点击个人网上银行登录,在登录区域输入你的用户名或者证件号码,然后输
X 关闭
X 关闭