专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

青少年Python编程系列36排序算法和查找算法入门

  上一节课我们已经讲了算法的基础知识,这节课我们讲一下算法中两个最为经典的类型:排序算法和查找算法。排序和查找我们之前直接使用列表的内置方法,那实现排序和查找最底层的原理是什么呢?我们正式开始这节课的内容吧。一、排序算法1。1冒泡排序
  冒泡排序是最简单的一种排序方法,它的原理是将一列数据中较大(或较小)的数据逐次向右推移的一种排序方法。冒泡排序分为内外两层循环。外层是总共要跑的遍数,2个数据比较一遍,3个数据比较一遍,以此类推,n个数据就跑了n1遍。内层循环真正比较数据。以升序为例,每次比较把较大的放到后面。由于每一遍都是将本遍最大的数据移动到最右边。就像是水中的气泡一样,小的气泡上升,就排到最上面,就像是冒泡一样,所以我们称它为冒泡排序。
  下面我们以升序为例,讲一下冒泡排序的基本思想:
  第一遍从第1个元素开始,让它和第2个元素进行比较,如果大数在前就交换;然后让2个元素和第3个元素比较,大数在前就交换;依次类推,直到比较完最后一个元素为止。第一遍排序结束时,最后一个元素是所有元素中的最大值。
  第二遍从第一个元素开始,让它和第2个元素进行比较,如果大数在前就交换;然后让2个元素和第3个元素比较,大数在前就交换;依次类推,直到比较到倒数第二个元素为止。第二遍排序结束时,倒数第二个数为第二大的数。
  n个数排序共需要n1遍。
  我们看一下模拟的实例:
  39216原始数据
  39216将3和9比较,不交换位置
  32916将9和2比较,交换位置
  32196将1和9比较,交换位置
  32169将9和6比较,交换位置。第一轮结束
  23149将3和2比较,交换位置
  21349将3和1比较,交换位置
  21349将3和4比较,不交换位置。第二轮结束
  下面我们看一下冒泡排序的Python代码实现:a〔3,9,2,1,6〕countlen(a)foriinrange(0,count1):外层循环forjinrange(0,count1i):内层循环ifa〔j〕a〔j1〕:a〔j〕,a〔j1〕a〔j1〕,a〔j〕两个数交换print(a)1。2选择排序
  选择排序对冒泡排序的改进。选择排序是在参加排序的所有元素中找出数值最小或最大的元素,如果它不是左侧第一个元素,就让它和左侧第一个元素交换位置;然后在余下的元素中找出数值最小或最大的元素,如果它不是左侧第二个元素,就与左侧第二个元素交换位置;依次类推,直到所有元素构成有序的序列。
  比起冒泡排序,选择排序更符合人们日常的排序习惯。它的比较次数与冒泡排序相通,但是交换的次数比冒泡排序要少,因此具有更高的效率。
  下面我们以升序为例,讲一下选择排序的基本思想:
  第一遍从第1个元素到第n个元素中找出一个最小的元素,如果它不是第1个元素,就让它和第1个元素交换位置。第一遍排序结束时,第1个元素为所有元素中的最小值。
  第二遍从第2个元素到第n个元素中找出一个最小的元素,如果它不是第2个元素,就让它和第2个元素交换位置。第二遍排序结束时,第2个元素为所有元素中第二小的值。
  下面我们看看如何实现最小元素的交换位置:
  第i遍排序开始时,先假设第i个位置上的数是最小的数,用k标记。让k位置上的数(a〔k〕)与i后面的数(a〔j〕)逐个比较,当找到一个比k位置上小的数,用k记录j的值。当j到达最后一个数时,一遍比较结束,k指向最小的数,即k记录最小的数的位置。当ik时,交换a〔i〕与a〔k〕的值。
  我们看一下选择排序的Python代码实现:a〔3,9,2,1,6〕countlen(a)foriinrange(0,count1):kiforjinrange(i1,count):ifa〔k〕a〔j〕:kjifk!i:a〔k〕,a〔i〕a〔i〕,a〔k〕print(a)1。3插入排序
  插入排序是先将待排序的数列中的第1个元素看成一个有序的子数列,然后从第2个元素开始,将数据逐个插入这个有序的子数列中,以此类推到最后一个数据。整个排序的过程类似于玩扑克牌时一边抓牌一遍理牌的过程,每抓一张牌就把它插入到应有的位置上。
  插入排序的整个过程如下图所示:
  插入排序
  第1次插入,将第2个元素与第1个元素比较。先将要插入到数a〔1〕放入一个空的变量key;将key与前面已经排好序的元素比较,如果key
  第2次插入,前面两个元素已经排好序,将第3个元素放入一个空的变量key,将key与前面排好序的元素比较,再将它插入对应的位置中。
  依次类推。
  我们看一下插入排序的Python代码实现:a〔3,9,2,1,6〕countlen(a)foriinrange(1,count):keya〔i〕ji1whilej0anda〔j〕key:a〔j1〕a〔j〕j1a〔j1〕keyprint(a)1。4其他排序算法
  以上三种排序的算法外,还有归并排序、快速排序、堆排序、计数排序、桶排序、希尔排序等等,快速排序的思想下节课我们会讲解,归并排序这里就略去不讲了,大家可以自己研究。别的排序算法相对较为复杂,目前阶段不需要大家掌握。有兴趣的同学可查阅相关资料。
  相对好理解一些的是归并排序(暂时不需要掌握代码),大家可以看动画的图片做相应的理解:
  归并排序二、查找算法2。1顺序查找
  顺序查找是一种最为常用的查找算法。我们生活中也经常会用到,比如我们要从一堆书里面找到我们想要的书,我们会从第一本开始一本一本地看,直到找到我们想要的那本书。
  顺序查找的基本思想是从第一个元素开始,按顺序逐个将数据与给定的数据进行比较,如果某个数据与给定的数据相等,则查找成功,输出所查数据;反之则未找到。
  顺序查找的代码使用Python实现也非常简单:data〔12,23,1,89,34,13,78,67,54〕key34要查找的元素x1要查找元素的索引countlen(data)foriinrange(0,count):ifdata〔i〕key:xibreakifx1:1代表元素未找到print(元素不存在)else:print(x)2。2对分查找
  对分查找又称二分查找,是一种高效的查找方法。对分查找的前提是被查找的序列是有序的。
  我们思考一个问题,从1到100中随机一个数字,猜出这个数是多少。如果我们从1开始一个个往后猜,每次只能排除一个数字,最坏的情况我们可能要猜100次。但是如果第一次猜50,告诉你大了或者小了。下次再猜25,再下次猜12,以此类推,不管是哪个数字,最多7次之内就能猜出来了。这样比起顺序查找要省了很多的时间。这就是对分查找算法。
  我们看看对分查找的思路:
  如果key是我们需要查找的值,列表a中存放了n个已经升序排列的元素,m为查找范围〔i,j〕的中间位置。我们查找的过程中必然是以下三种情况之一:如果keya〔m〕,key在前半部分,新的查找范围在〔i,m1〕中如果keya〔m〕,找到需要对数据如果keya〔m〕,key在后半部分,新的查找范围在〔m1,j〕中
  我们看一下对分查找的Python代码实现:data〔2,34,36,47,51,53,59,62,75,79,82〕key47需要查找的元素countlen(data)i,j0,count1x1whileij:m(ij)2ifkeydata〔m〕:xmbreakelifkeydata〔m〕:im1else:jm1ifx1:print(未找到元素)else:print(x)三、课后思考题
  1、选择题
  列表l〔9,2,8,6,3,4〕,采用选择排序进行升序排序,第二遍排序之后的结果是()
  A。〔2,3,8,6,9,4〕
  B。〔2,8,6,3,4,9〕
  C。〔2,6,3,4,8,9〕
  D。〔2,3,4,6,8,9〕
  2、选择题
  列表l〔5,2,6,3,7〕,利用插入排序进行升序排序,第二次插入排序的结果是()
  A。〔5,2,3,6,7〕
  B。〔2,5,3,6,7〕
  C。〔2,5,6,3,7〕
  D。〔2,3,5,6,7〕
  3、选择题
  某个列表中有7个元素,依次为19、28、30、35、39、42、48。如果采用对分查找法在列表中查找元素48,需要查找的次数是()
  A。1B。2C。3D。4四、上节课思考题答案
  1、C
  2、C
  3、参考代码n0统计个数foriinrange(100,1000):ai100百位数bi10010十位数ci10个位数ifa3b3c3i:n1print(i)print(合计个数:,n)

周琦郭艾伦注册完成,下赛季他们一定会留在CBA吗?在完成这个休赛期国家队的比赛后,男篮众将已于近日返回国内,按照CBA的规定,海外参赛的这些国手们8月31日前预注册,回国结束隔离后的7天之内需要完成正式注册,也就是说,此前进行预注陈幸同42韩乒冠军9月3日晚间至4日凌晨,WTT保加利亚支线赛继续进行,已经决出的男女单打四强中,国乒各有3人,展现了集体强大的实力。国乒都有哪些选手进入四强了呢?男单周恺周启豪曹巍女单陈幸同钱天一狂野西部!强队众多,各支强队核心阵容对比,谁能冲出西部?下个赛季,随着西部一些球队的伤员开始付出,也随着休赛期的一些交易变动,下个赛季的西部会比这个赛季更加狂野,强队也会更多,不少球队的核心阵容看起来都非常有竞争力,我们按上赛季的排名来国乒14人惨遭淘汰!女双全军覆没,提前夺得2冠,今天迎来决战北京时间9月4日,乒乓球WTT保加利亚赛即将迎来最后一日的战斗,目前国乒各项目有喜有忧,单打总计14人被淘汰出局,新增3位运动员输掉外战,但陈幸同周启豪等6人都打进了半决赛,夺冠希拒绝29队,加盟湖人坐稳首发!紫金军意外收获,佩林卡别再犯错了经历了一个失败的赛季之后,湖人球迷们有理由期待新赛季以及未来紫金军团的表现,吸取了此前的教训之后,湖人运营副总裁佩林卡在这个休赛期似乎有所开窍,虽然截至目前他的最佳引援看起来只有一现役生涯超过十年却没有拿到冠军或MVP的球星,谁赚的钱最多现役NBA球员中,职业生涯超过十年,既没有拿到总冠军,又没有拿到过MVP,却赚取到了超过两亿美元薪水的球星有哪些?控卫之王保罗排在首位,甜瓜安东尼紧随其后。他们生涯的表现是否对得起邓肯对詹姆斯说未来是你的!那对科比说了啥?被你逼到成就伟大NBA有着很是多的第一,如球队战绩第一,个人排名第一等等,于篮球历史之上,N第一人当属于乔丹,第一小前目前来看是詹姆斯,而历史第一大前锋自然是我们的21号新秀了,他叫邓肯,在马刺征NBA晚报曝湖人用威少换康利,甜瓜5大下家,克莱晒海上度假照关注NBA的朋友们,大家好!在漫长的休赛期,NBA球星的动态成为了球迷们关注的重点。克莱晒度假照,曝湖人用威少换康利,尼克斯没得到米切尔很失望,媒体列安东尼5大下家,乔治沃尔一起训既然努力获得成功的概率很低,那么努力的意义究竟何在?我们小时候,总以为只要努力了,就可以获得成功。可当我们踏入社会,被现实狠狠地摁在地上摩擦时,却发现完全不是这么一回事儿,太多人已经为生活拼尽全力,可他们还是在生存线上苦苦挣扎,卑微至少赚到一亿美元,却不愿结婚的六大单身贵族,杜兰特从不乱花钱一个成功男人的背后,总会有一个出色的女人。在NBA当中,有许多历史级别的球员,或者说是一个时代的引领者,包括乔丹,科比詹姆斯,以及开创了小球时代的库里。他们都在职业生涯内完成了结婚该换教练了!郑钦文美网2盘惜败无缘16,三点致命失误恐断送前程北京时间9月4日9点半,万众瞩目的美网第三轮,由中国新生代球员郑钦文对阵非种子选手尼迈尔。由于赛前郑钦文本赛季大满贯优异表现,被美网视为一匹大黑马和冠军候选,而对手名不见经传,一场
还有变声器?变3威震天可穿戴头盔来了Killerbody带来了一款变形金刚真人电影版威震天的可穿戴头盔,那么这款产品有什么玩点,我们一起来看看吧!官图鉴赏从官图来看,这款产品是变形金刚3的版本造型方面遵循了油罐威震天迅达集成灶320Z,开启健康蒸时代时代发展日新月异,家电行业不断进步,尤其是厨电产品更迭换代加速,开始朝着集成化高端化智能化多功能方向演变。在七八十年代,厨房里的家电都是零散摆放,不仅占地方且不美观,而到了我们这一依克多因护肤全能王者,肌肤屏障的守护神美妆头条新媒体网络上,新一代都市女性是这样紫的上得了厅堂,下得了厨房,杀得了木马,翻得了围墙,开得起汽车,买的起洋房,斗得过小三,打得过流氓!在成分党功效党盛行的今天,有一个护肤成一向明艳的殷桃,在曾黎面前也败下阵来!同穿礼服出镜差距好明显女人到了40岁,无论是学识还是经历都已经有一定的沉淀,这时一个成熟的女人就像一杯红酒,越品越有味道。曾黎和殷桃都出生在70年代,无论是演技还是相貌,她们在娱乐圈都是数一数二的存在,童瑶也剪短发了,清爽短发配破洞裤走机场,帅气又有型一款发型留久了可能会有审美疲劳,女孩儿爱美,喜欢折腾自己的造型,让自己看起来不一样,发掘出自己不一样的美。这不,气质小花童瑶也换发型了,一直留着长发的她,剪了一款短发,看上去气质都归去后,希望将骨灰撒到大海的人,多半都有这些追求余亚飞在落叶归根中写道树身即使高千丈,落叶归根也有期。这高大的树木,哪怕有千丈之高,但它始终有落叶归根的那一天。有旺盛,就肯定会有凋零,这是大自然永恒存在的定律。树如此,人亦如此。数一数餐桌上还有几人人生若只如初见,你好我是慕远。此前中秋之夜,与小女夜游香溪,两岸悬灯结彩,璀璨夺目。木渎古街,人潮涌动,跟随着行人的流动,细细欣赏,慢慢前行,心神宛若穿越千年,来一场古与今的对话,最让人难以抗拒的温柔回答TOP1人生就像一个晴雨表有阳光灿烂的日子也有阴雨绵延的时刻但就算下雨了也不要太担心因为总有那么一个人会为你雨中撑伞就像下面的几个小故事温暖在指尖蔓延不知道屏幕外的你,有没有被上面小故事中苦妓回忆录一名90岁老人招嫖16岁少女,爱与性究竟是怎样的?当你的生命即将走到终点的时候,你最想做的事情是什么?是去一个风景优美的地方旅行,用这场旅行,为生命画上完美的句号,还是用最后的时间,完成之前一直没能实现的愿望。或者干脆什么都不做,建议黑黄皮女生避开2个禁忌色,选3个显白色,提亮肤色就简单了穿衣搭配最重要的一点就是色彩挑选,因为颜色是能够给人带来直观的印象的,一件衣服的颜色做出改变,就算款式相同,但风格就会发生翻天覆地的变化,所以对于我们大多数女孩来说,穿衣搭配挑选合瞭望摄影张廷奉百年首钢园华丽蝶变专题摄影编者按一提起北京西部的石景山,人们都会不由自主地想起首钢和军区这两个标志性单位。2010年首钢完成搬迁,12年来,首钢实现华丽蝶变,在冬奥效应的带动下,首钢园加快聚集高端要
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网