哇编程!-跟小明一起学算法_第1页
哇编程!-跟小明一起学算法_第2页
哇编程!-跟小明一起学算法_第3页
哇编程!-跟小明一起学算法_第4页
哇编程!-跟小明一起学算法_第5页
已阅读5页,还剩275页未读 继续免费阅读

付费阅读全文

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

᥻ᜠ

Ⱦ悢⻒㣑⃃怺⸩乚㾘

⍭ᭃє३֚΀㑋㦌

文文前.indd前.indd122020/4/14020/4/14115:53:295:53:29

内容简介

本书融入了游戏设计思想,通过游戏攻关的方式,介绍各种算法的原理和应用。全书共分

8章,具体包括排序算法、穷举算法、递归算法、回溯算法、贪心算法、分治算法,栈、队列、

树三种数据结构,动态规划算法,图论相关算法等内容。

本书适合程序员和参加NOIP、NOI、ACM/ICPC竞赛的读者阅读学习,也可作为高等院校

计算机、数学及相关专业的师生用书和培训学校的教材。

图书在版编目(CIP)数据

哇,编程!:跟小明一起学算法/游明伟,吴健之编著.—北京:

中国铁道出版社有限公司,2020.5

ISBN978-7-113-26736-0

Ⅰ.①哇…Ⅱ.①游…②吴…Ⅲ.①程序设计-算法-少儿读物

Ⅳ.①TP311.1-49

中国版本图书馆CIP数据核字(2020)第046339号

书名:哇,编程!——跟小明一起学算法

WA,BIANCHENG!——GENXIAOMINGYIQIXUESUANFA

作者:游明伟吴健之

责任编辑:于先军读者热线电话:(010)63560056

责任印制:赵星辰封面设计:

出版发行:中国铁道出版社有限公司(100054,北京市西城区右安门西街8号)

印刷:三河市航远印刷有限公司

版次:2020年5月第1版2020年5月第1次印刷

开本:787mm×1092mm1/16印张:17.25字数:330千

书号:ISBN978-7-113-26736-0

定价:69.80元

版权所有侵权必究

凡购买铁道版图书,如有印制质量问题,请与本社读者服务部联系调换。电话:(010)51873174

打击盗版举报电话:(010)51873659

文文前.indd前.indd222020/4/14020/4/14115:53:345:53:34

配套资源下载地址:

/2020/0404/14246.shtml

前言

近些年来,随着人工智能、大数据等技术的迅猛发展,计算机编程开始逐渐进入大众的

视野,特别是教育行业,各种少儿编程班如雨后春笋般层出不穷。人们开始渐渐意识到,培

养孩子的逻辑和计算思维能力,已经成为一项必不可少的教育方式。而这些在我的童年时期,

是一项遥不可及的事物,甚至在我小学和初中期间,计算机还仍未被普及。那时候人们对计

算机的认识,还只限于QQ和各种网页小游戏。计算机科学发展到现在,我们在感叹科技发

展迅速的同时,也必须感谢这个美好的时代。

我第一次接触计算机编程是在初三保送高中阶段,其他同学还在埋头准备中考时,我有

幸遇到了我的恩师——NOI金牌教练董永建。恰逢董老师在保送生中选拔信息学奥赛学生,

中考期间和整个暑假,我们42名保送生提前开始了高中生活,跟随董老师从零开始接触计

算机、学习算法,直到暑假结束仅剩4名同学坚持了下来。后来,我们4个人从机房搬进了

“小黑屋”,认识了各位师兄,开始了真正的“封闭式训练”。高中三年我们没有周末、没

有节假日、没有寒暑假,把所有的课余时间全贡献给“小黑屋”,董老师带着我们参加各

种培训、参加高校ACM比赛,为了锻炼体能,带着我们爬山,偷玩游戏被发现了,罚我们

操场跑圈……和师兄、师弟、师妹们在“小黑屋”里的三年时光,是我至今回想都觉得快

乐的时光,也是影响我一生的时光。在接触编程后半年,我第一次参加了NOIP(National

OlympiadinInformaticsinProvinces,信息学奥林匹克联赛),第一年初出茅庐,只是让我

们见识了世面,师兄们才是当年的主力。我们充当了一年陪考,直到第二年,经过一年多的

积累,我们成了主力,在2017年NOIP竞赛,我获得了省一等奖。所有光鲜的背后,都隐

藏着熬过无数个不为人知的黑夜。

非常感谢董永建老师的悉心教导,让我在初中时期开始,对计算机编程和算法有了初步

的认识。也缘于NOIP竞赛,让我取得了保送武汉大学的资格,并因此决定了我毕业以后的

工作和生活。人生选择一条路,一直走到尽头,不退让,不更改,是件幸事。

文文前.indd前.indd322020/4/14020/4/14115:53:355:53:35

哇,编程!——跟小明一起学算法

NOIP竞赛对于很多孩子和家长来说,还是一个比较陌生的事物。它由中国计算机学会

(CCF)统一组织,每年在同一时间、不同地点以各省市为单位由特派员组织。这个竞赛最

初设立的目的是向中学阶段的青少年普及计算机科学知识,带来新的学习思路,并借此选拔

人才。得益于近年来计算机知识的普及,许多对算法思想感兴趣的学生和家长已经开始把

NOIP当成一种新的学习思路和方法。本书所讲的算法便是基于NOIP竞赛内容进行阐述的,

从基础的排序算法到图论算法,逐步深入了解算法思路。

为了便于各位读者对枯燥算法内容的理解,本书融入了游戏设计思想,通过游戏攻关的

方式,介绍各种算法的原理和应用。当你通读完本书后,会发现原来我们平常玩的各种手游,

比如“吃鸡”“王者”,它们的设计思路就是采用了各种算法,这时候你就已经开始领略到

算法的奥妙,并开始进入算法的魔法大门了。

为什么写这本书?

写这本书的原因,是来自朋友和妻子的启发。得益于NOIP竞赛,我大学的专业学的是

软件工程,毕业后从事的也是软件开发工作。在快要迈入而立之年的某一天,我的妻子问了

我一个问题:“你做了这么多年软件开发,早年也参加过NOIP,是不是现在得有所沉淀了?”

这时候我们的女儿刚出生6个月,我因此开始思考教育的问题。这时候我的一个朋友告诉

我:“你可以尝试写一本书,将你在NOIP竞赛所学及多年工作积累记录下来,说不定以后

还能用来给你女儿当教材。”于是,便有了这本《哇,编程!——跟小明一起学算法》。

■本书导读

全书共分8章:

第1章主要介绍排序算法,介绍了经典的三种排序方法,同时介绍了时间复杂度、空间

复杂度。

第2章主要介绍了五种基础的算法,是信息学奥赛中常见的五种算法,一道算法题往往

会包含多种基础算法,本章也为后续篇章的算法奠定基础。

第3、4章主要介绍了三种数据结构——栈、队列、树,数据结构是一门语言的基础,

本章在介绍算法的同时也强化了C++语言,补充了一些C++基础学习中未涉及的内容。

第5章主要介绍了动态规划算法,动态规划算法往往是NOIP(普及组、提高组)的

压轴题,也是能区分竞赛选手差距的题目,本章由最经典的背包问题开始讲解动态规划算法,

理解本章才算是开始理解“算法的精髓”。

·4·

文文前.indd前.indd422020/4/14020/4/14115:53:355:53:35

第6、7、8章主要介绍图论相关算法,包括深度优先搜索、广度优先搜索、图的遍历、

最小生成树、并查集、最短路径等。这三章所讲的算法属于进阶算法,图论相关算法其本质依

然是前面章节所讲的基础算法,在介绍图论算法时,也继续帮助读者巩固前面部分的基础算法。

阅读本书的读者,需要具备基本的C++语言基础,本书算法尽量采用通俗易懂的例子

给读者讲解。学习算法并不是一件难事,算法本身也并不高深,难在理解算法后怎么再用通

俗的话语讲解出来。本书所涉及的算法,也是我从初中就开始接触并学习的,我相信初中程

度的读者也能够理解并使用本书所写的算法。

■致谢

在开始写这本书之前,我一直犹豫要不要写,因为刚出生的女儿几乎占用了我所有周末

和空闲时间,是妻子的鼓励,让我下定决心要写完这本书,作为送给女儿的礼物。在我写书

的这半年里,所有的节假日我都躲在图书馆度过,感谢我的妻子这半年里辛劳的付出,感谢

她在背后的支持。

感谢我的大学室友——JazyWoo同学提供了给我写书的机会,帮我联络各方资源,也

感谢他在写书期间,与我共同探讨,共同完成此书。

还要再一次感谢董永建老师,是他的谆谆教导才能让我有幸写了这本算法书。

游明伟

2019年4月

·5·

文文前.indd前.indd522020/4/14020/4/14115:53:355:53:35

目录

第1章整理下背包.....................................................................................1

1.1桶排序........................................................................................................2

1.2冒泡排序.....................................................................................................8

1.3快速排序....................................................................................................15

1.4时间和空间复杂度.....................................................................................20

第2章开始闯关吧...................................................................................22

2.1忘记密码了——穷举算法...........................................................................23

2.2汉诺塔——递归算法..................................................................................25

2.3八皇后——回溯算法...................................................................................31

2.4分装备——贪心算法...................................................................................41

2.5二分查找——分治算法..............................................................................45

第3章爆满的服务器与背包.....................................................................53

3.1服务器爆满——队列..................................................................................54

3.2合成宝石——优先队列...............................................................................61

3.3背包里的道具——栈..................................................................................65

3.4十进制转任意进制.....................................................................................74

文文前.indd前.indd622020/4/14020/4/14115:53:355:53:35

第4章点亮技能树...................................................................................77

4.1树.............................................................................................................78

4.1.1树的定义...........................................................................................................................79

4.1.2树的相关术语...................................................................................................................80

4.2二叉树......................................................................................................83

4.2.1二叉树性质.......................................................................................................................84

4.2.2特殊的二叉树...................................................................................................................85

4.2.3二叉树的遍历...................................................................................................................87

4.2.4二叉树的存储结构.........................................................................................................105

4.3堆...........................................................................................................107

4.3.1大根堆与小根堆.............................................................................................................107

4.3.2堆的操作.........................................................................................................................109

4.4堆排序.....................................................................................................132

第5章爆装备啦,快来捡......................................................................139

5.1捡到完美的海螺——递推算法....................................................................140

5.201背包——动规算法................................................................................143

5.3完全背包——动规算法.............................................................................148

5.4多重背包——动规算法.............................................................................152

第6章迷宫............................................................................................156

6.1图的概念..................................................................................................157

6.1.1图的定义.........................................................................................................................158

6.1.2图的存储结构.................................................................................................................162

文文前.indd前.indd722020/4/14020/4/14115:53:355:53:35

6.2图的遍历.................................................................................................167

6.2.1深度优先搜索法.............................................................................................................168

6.2.2广度优先搜索法.............................................................................................................172

6.3并查集.....................................................................................................176

6.3.1分析.................................................................................................................................177

6.3.2并查集的原理.................................................................................................................179

6.3.3并查集的操作.................................................................................................................180

6.4最小生成树..............................................................................................186

6.4.1Prim算法........................................................................................................................187

6.4.2Kruskal算法...................................................................................................................192

第7章探索地图每个角落......................................................................197

7.1深度优先搜索...........................................................................................198

7.2广度优先搜索...........................................................................................211

第8章快逃命去吧.................................................................................229

8.1拓扑排序.................................................................................................230

8.2最短路径................................................................................................240

8.2.1Floyd算法.......................................................................................................................240

8.2.2Dijkstra算法...................................................................................................................250

8.2.3Bellman-Ford算法.........................................................................................................255

8.2.4SPFA算法.......................................................................................................................261

文文前.indd前.indd822020/4/14020/4/14115:53:355:53:35

第1章

整理下背包

正正文.indd文.indd122020/4/14020/4/14115:54:325:54:32

哇,编程!——跟小明一起学算法

1.1桶排序

ࡄΡ޼ᾞદ౅࢓స֭ࡄᾞ౅ᅨᾩࢡ౅ᧅύຑᣂ۸௻ࡄᰃnjኦശ۸ϙ௿ಓnj௡᧿̀ϝΡ֭

ᅨ࢓ࡄցӘ˗ᅨᰃະძࡓ࡝ಂঠዢʷტ˟ឦúú࢓సǍ

᎚̆௨к٠ᾞ࢓స᎚̆ˀთҀ৕þદ׵દ࿸࿸Ӡॣҵࣅ̀ÿnjþΎદࡰᢪӠࡄഁኡޗ̭

˔࢔ӊᩝÿnj˷ˀთґࢉþᮤᕧᩯÿፓૈ᎘ጉ̀ᾩ౼ˀζఢᑨӠґջþ֭యૈআʷޑዃᮨប

ၲ༂ત٠ᾞۿᥧณጌ׵ӁณጌÿǍᢰᆪ௨кᾩદ᎚̆֙Νআআ৕৕

ᾞᧅˀ౅࢓፸nj̡٘ޑᾞ޼׀ᾩ᢮፩ૈআǒቖᳺၵ༂៌ǓǍؘᾩᥦᨵࢡ౅ఒૂಥ᠋ޑˀ៵

डᎡᥦ˦ᨘྗ٠ᾞᤔ૱అጨnjૂଥҠಧnjᓌʽ᧮ފ࢓ঠ׵࢓ᕧַᾼΓΡ˷ಭᥦᨵ̀ᾩΓΡᝧ

ኦᆪณ᪮ᯍᾩૂʽષᆪ૮ᓞᾞ˞̤˦NPC֔Ꭺ̀દʷૠಐӲᾩˀ᜿ᾞϙ˞ࡓ࡝ಂঠዢʷტ

Ǎފᾩદបջᦩٖ҄݀ᝈѫʷʾᝧעឦᾩદ৽˦ᒽ᥃ᎪΓΡ˟

ᾩᆘᅨદᆩ᧮ᕧ̀ᾩఅጨᾥ3ᨹᾦnj૮ᓞᾥ1ᨹᾦnjҠಧᾥ6ᨹᾦnjޑᆜ֙ފᦩٖ҄݀ᅨᝧ

ᩯǍޑ˦ณ᪮ᯍᾥ3ᨹᾦnjᰑ౰छӲᾥ10ᨹᾦnj۷ಲᾥ7ᨹᾦĀĀ᧮޼੥ប٘ᾞ֙દ޼іใᥦ

ᾞྠӂ୤फ़ᾩ૮ᓞᾥ1ᨹᾦnjณ᪮ᯍ׀̏رΧഉᥧ᜿୤फ़ᆘᆘદᒽ˼ৈ᢯ފˀጌ̀ᾩѭࢉᝧ

ᾥ3ᨹᾦnjఅጨᾥ3ᨹᾦnjҠಧᾥ6ᨹᾦnj۷ಲᾥ7ᨹᾦnjᰑ౰छӲᾥ10ᨹᾦĀĀᦩٖ҄݀ᅨ

୤फ़Ԉᒽᆜ޼თᾩղಓ႞ႎ༶ᆊᅨᦩ҄Χഉʷʾࢡ໫౟̀ᾞ

·2·

正正文.indd文.indd222020/4/14020/4/14115:54:345:54:34

第1章整理下背包

࢓సࢡᎪϝΡቷౝʷʾ୤फ़ጉ๠ǍޗࡄΡᾩϝᇚᦩ༂ત፥Ꮀᨵᅨ୤फ़౅৽˦рᅨַᾼ̭֭

દΡѭΌ᎟ʷቶಂጃՋnjಂᲒ௫ᅨ୤फ़úúഩ୤फ़Ǎ

ഩ୤फ़౅ʷቶ᎑਋୤फ़ጉ๠ᾩࡐᅨघϙղႏ౅࢐௻᎖ҍᅨ௻ӊӠࢉॢᏢ֠ᅨഩ˗ᾩ࿇֯

ഈ୔෦˔ഩᅨើ௻ᾩ଩ᯩफ़ૈӁഩᏢ֠Ǎ

଩࿐ղႏᾩદΡಭࢉᝧފΧഉᥧ᜿୤फ़Ǎ

第1步首先,我们知道装备价格最大是10,所以我们先准备10个编号分别为1~10号

的桶,同时将每个桶的计数器设置为0,如下图所示。

第2步我们将斗篷(3金)放入3号桶中,3号桶计数器+1。

第3步将护腕(1金)放入1号桶中,1号桶计数器+1。

·3·

正正文.indd文.indd322020/4/14020/4/14115:54:345:54:34

哇,编程!——跟小明一起学算法

第4步将冰杖(6金)放入6号桶中,6号桶计数器+1。

第5步将水银鞋(3金)放入3号桶中,3号桶计数器+1,此时3号计数器累加到2,

表示有2个价格为3的装备。

·4·

正正文.indd文.indd422020/4/14020/4/14115:54:345:54:34

第1章整理下背包

第6步将风暴巨剑(10金)放入10号桶中,10号桶计数器+1。

第7步将圣杯(7金)放入7号桶中,7号桶计数器+1。

1ᾩ˞ۆᾸ޾೅ើ௻ފ0ᾩӕᝉቆ៽Ꮲ֠ᅨഩᨵใ಄ᝧ˞ۆ଩࿐ʽᯅහ᱿ௐϙ֯ᾩ޾೅ើ௻

Ǎފ2ᾩӕᝉቆ಄2˔ᝧ˞ۆᾸ޾೅ើ௻ފӕᝉቆ಄1˔ᝧ

0ᾩӕˀૈ՝Ꮲ֠Ᾰ˞ۆಂ֯ᾩદΡ֔ᮨប଩࿐1Ώ10ᅨᏢ֠ᯩफ़ૈ՝Ꮲ֠ᾩ޾೅ើ௻

2ᾩӕૈ՝2නᏢ֠ĀĀ˞ۆ1ᾩӕૈ՝1නᏢ֠Ᾰ޾೅ើ௻˞ۆ޾೅ើ௻

՝1නᾩ2֠ˀૈ՝ᾩ3֠ૈ՝2නᾩ4֠ˀૈ՝ᾩ5֠ˀૈ՝ᾩ6֠ૈ՝1නᾩ7ૈ֠1

՝1නᾩ8֠ˀૈ՝ᾩ9֠ˀૈ՝ᾩ10֠ૈ՝1නǍૈ֠

ಂ᎚ૈ՝ӁಭᅨᎥ೅ࢡ౅ᾷ

·5·

正正文.indd文.indd522020/4/14020/4/14115:54:355:54:35

哇,编程!——跟小明一起学算法

࢐Χഉ᤟୏થഩᅨᏢ֠ᾩᦎᥝ಄फ़ᅨۿᦎᥝʽᯅᅨහ᱿દΡ֙ΝᆘӁᾩഩ୤फ़ࢡ౅चߊ

՝ഩᏢ֠ಭࡢၶΧഉᅨ୤फ़Ǎૈ

ᾞ׀દΡґ࢐ʽᯅᅨௐϙහ᱿᤟୏થΛᇨಭᆘᆘ

第1步首先,我们准备一个数组bucket[11]来代表桶,bucket单词就是桶的意思,

bucket[1]就表示编号为1的桶,用来对价格为1的装备进行计数;有同学可能会觉得奇怪

了,明明只要10个桶,bucket[]数组长度为什么定义成11呢?同学们回想一下,我们在

C语言基础里学过的数组概念,由于数组的下标是从0开始,bucket[11]表示是从bucket[0]

到bucket[10]的长度为11的数组;如果我们只定义bucket[10],那数组的最后一个元素是

bucket[9],我们就没地方放价格为10的道具。

第2步定义好bucket[]后,我们用memset函数将数组初始化,表示计数器初始化设置

为0。

第3步然后循环6个装备的价格,将每个价格对应的计数器+1。

第4步最后,按1~10顺序,根据bucket数量,打印出数组下标。

ǘΛᇨࡢၶǙ

#include<iostream>

#include<cstdio>

usingnamespacestd;

intmain()

{

inti,j;

·6·

正正文.indd文.indd622020/4/14020/4/14115:54:355:54:35

第1章整理下背包

intn=6;

inta[6]={3,1,6,3,10,7};

//a[]最大数为10,需申请空间大小为10的buckets[]

intbuckets[11];

//将buckets中的所有数据都初始化为0,表示初始时每个桶的计数器都是0。

memset(buckets,0,sizeof(buckets));

//将a[]中的数分别放入对应标号的buckets中,每放入一个,计数器+1

for(i=0;i<n;i++){

buckets[a[i]]++;

}

//循环桶的标号,根据每个桶的计数器打印出桶的标号

for(i=1;i<11;i++)

for(j=0;j<buckets[i];j++)

{

printf("%d",i);

}

return0;

}

ᾼע౅ˀ౅ীጃՋ

іഩ୤फ़ᥦആ֔თʷᢷ˞Nᅨৎၵᾩ࢐௻᎖ࡗથ୤फ़ᅨጉ๠ᾩદΡኄ˞᎑਋୤फ़ጉ๠ᾩ

᎑਋୤फ़౅ಂ৪ᅨ୤फ़ጉ๠ᾩीភᅨ᎑਋୤फ़ጉ๠಄ᾷഩ୤फ़njើ௻୤फ़njݑ௻୤फ़Ǎ

ഩ୤फ़ᚨ࿇୤फ़ী৪ᾩό౅દΡᮨ஀Ӱᇚᦩা୤फ़ᅨ௻᎖˗ಂޖᅨ௻౅ޑ࢔ᾩᥥᮨបრ

᠎ᬠ७˞ಂޖ௻ᅨ௻᎖ᾩᥦആ౅ীຬ᡾࠹ѐእᬬᅨᾩк޾દΡបᎪ[2,1,9999999]ᥦആᅨ௻

᎖ᥧ᜿୤फ़ᾩદΡࢡᮨប࡞˧ʷ˔bucket[1000000]ᅨ௻᎖ᾩࡢ᭣ʽદΡ֔თ̀bucket[1]ᾩ

bucket[2]׵bucket[9999999]ᾩᑉ҃ΓᅨእᬬࢡᝠદΡຬ᡾̀Ǎ઼Νഩ୤फ़Ꭱीζთ۸डᇚা

୤फ़ᅨ௻᎖ᾩ˅া୤फ़ᅨ௻᧮ˀޖᅨ੏ҤǍ

દΡᇚᦩഩ୤फ़ᅨղႏᾩ౅Ӝთ࠹ѐእᬬᥧ᜿యᬬދಜ७˞Oᾥnᾦᅨ୤फ़ᾩᥦቶр๠

દΡኄ˞þთእᬬ୏యᬬÿǍ

ࡄ᧮׵࢓సʷആᾩ֭ޑόࢉ̆ഩ୤फ़ᥦቶຬ᡾እᬬᅨ᜿˞ᾩ࢓సੴӠᯂी֙ᑢᾩথ࿇ী

಄ʷᰂᕊ፼ᅨ৕ᾞ઼Νഩ୤फ़˷ࢡ಄̀Ղ፽࿾úúഩ୤फ़2.0ᾩղႏ׵ʽᯅʷആᾩ֔ˀᥝʷ

˔ഩᝧᅨ௻։ޑ̀Ǎ

к៘દΡთbucket[0]თಭᝧΧഉ0Ώ9˨ᬬᅨᝧފᾩbucket[1]თಭᝧΧഉ10Ώ19˨

ĀĀ࿇֯દΡ଩ᯩफ़ࢉbucket[0]ഩҍފᾩbucket[2]თಭᝧΧഉ20Ώ29˨ᬬᅨᝧފᬬᅨᝧ

ᅨ௻ᥧ᜿ҍ᧨୤फ़֯ґ᥃Ӂᾩࢉbucket[1]ഩҍᅨ௻ᥧ᜿ҍ᧨୤फ़֯ґ᥃Ӂᾩࢉbucket[2]ഩ

ҍᅨ௻ᥧ᜿ҍ᧨୤फ़֯ґ᥃ӁĀĀ

·7·

正正文.indd文.indd722020/4/14020/4/14115:54:355:54:35

哇,编程!——跟小明一起学算法

ᥦആદΡࢡ࢐ղಓ઼ᮨបእᬬᏴ࢓̀10Фᾩ޾೅bucket[0]თಭᝧΧഉ0Ώ99˨ᬬᅨ

ᾼદΡᅨእᬬ˷ζᆏॢᏴ࢓100Фnj1000ФᾸעފᾩ઩ᑆთಭᝧΧഉ0Ώ999˨ᬬᅨᝧފᝧ

ᥦቶጉ๠֕ϙӊ๓ᾩၶ۸֔ប̀ឫࢡ޼ᾩዬࡄ˸̀2.5ᕊӊ๓ጉ๠֯ᾩદΡࢡᒽᔋ᜿ᏢҖഩ

୤फ़2.0Λᇨ̀Ǎ

1.2冒泡排序

ࡄ˸ࡗഩ୤फ़ᾩޖࡰ౅ˀ౅ࢉ୤फ़ጉ๠಄̀Әහ̀ឫᾩഩ୤फ़౅ˀ౅ࢡᒽឫңદΡ઼಄

ᾼዳഓᒎ࡞ˀ౅ᅨᾩ۠˞ഩ୤फ़þഩÿᅨ᭫Ӣᾩࢡࢌᔏഩ୤फ़֔ᒽთ̆တ࡞ዬעᅨ୤फ़ᬦᰃ

া୤फ़फ़ӓǍ

෩޾દၶ۸ྠӂʷʾᦩٖ҄݀ᅨ֮ኄ୤फ़ᾩᦩ҄୤फ़ᨵᯅ։થᾷҠಧᾥbzᾦnjఅጨᾥdᾦnj

ᰑ౰छӲᾥfbjjᾦnj૮ᓞᾥhwᾦnj۷ಲᾥsbᾦnjณ᪮ᯍᾥsyxᾦᾩદΡ֙ΝᆘӠᦩ҄଩࿐᱉࠸

෥р̀୤फ़Ǎ

޾೅ᦩٖ҄݀ᨵᯅᅨΧഉˀ౅௽௻ᾩӁၶ6.5ᥦആऺ࢓௻ᅨΧഉᾩࢉ̆ഩ୤फ़ಭ᠋˷౅

ᾼעႏᅨᾩᧅᥦቶ੏Ҥ಄̤˦୤फ़ጉ๠෩ᤵ᥾֪މఢᒽ˞ԅᾩ઩ᑆ᠋ᤵᮐ

દΡࢡৈþቝÿӁ୤फ़ጉ๠ძᅨసిúúҒ๦୤फ़ǍҒ๦୤फ़ᾩ౅ϸන෩ࢉː˔ᆏ᧔ᅨ

ᥧ᜿෩ࢉᾩᆎӠ઼಄ᅨѩۿދѩ፧ᾩ޾೅ࡐΡᯩफ़ˀ༶ᢺបนᾩӕ̔୏ᥦː˔ѩ፧ύᐔᾩᨶ

ᅨ๦๦ζಂޖ፧᧮଩បน̔୏ࡗ෪Ǎᯭ֮ਆ˧ᾩҒ๦୤फ़ࢡіาณ˗ᅨ๦๦ʷആúúณᨵಂ

·8·

正正文.indd文.indd822020/4/14020/4/14115:54:355:54:35

第1章整理下背包

ອӠาณᝉᯅǍۿ৪

દΡѭთҒ๦୤फ़ࢉʽʷᕊᅨᦩ҄Χഉᥧ᜿ΎώӠᲒ୤फ़ᆘᆘᾩղߛᯩफ़˞ᾷ

ᰑ౰छӲᾥ10ᨹᾦnj۷ಲᾥ7ᨹᾦnjఅጨᾥ3ᨹᾦnj૮ᓞᾥ1ᨹᾦnjҠಧᾥ6ᨹᾦnjณ᪮

ᯍᾥ3ᨹᾦ

1.第一趟冒泡排序

第1步进行第一次比较,比对第一位10和第二位7,10>7,交换位置。

第2步进行第二次比较,比对第二位10(因上轮位置交换,此时第二位是10)和第三位3,

10>3,交换位置。

第3步进行第三次比较,比对第三位10和第四位1,10>1,交换位置。

第4步进行第四次比较,比对第四位10和第五位6,10>6,交换位置。

第5步进行第五次比较,比对第五位10和第六位3,10>3,交换位置。

ᾩՂӠ̀ಂʽᯅᾩ෦නʽՂᥝޖᎡᥝዢʷᢷᅨҒ๦୤फ़˨֯ᾩዢʷύᅨ10პ̆௻зಂ

ᅨ10डᎡþতύÿ̀Ǎޖኌ᧮౅׵ᆏ᧔௻ࢉ෩ǍΎۭ˗દΡ֙Νօၶᾩසయफ़ӓ˗௻зಂ

୪ʾಭદΡࢉӺʾᅨӰ̋ύ௻ґᥧ᜿ʷᢷҒ๦୤फ़Ǎ

2.第二趟冒泡排序

第1步进行第一次比较,比对第一位7和第二位3,7>3,交换位置。

·9·

正正文.indd文.indd922020/4/14020/4/14115:54:365:54:36

哇,编程!——跟小明一起学算法

第2步进行第二次比较,比对第二位7(因上轮位置交换,此时第二位是7)和第三位1,

7>1,交换位置。

第3步进行第三次比较,比对第三位7和第四位6,7>6,交换位置。

第4步进行第四次比较,比对第四位7和第五位3,7>3,交换位置。

ᅨ7ᾩՂӠ̀10ᅨʾᯅᾩ˷۞Ӡ̀ᔋठᅨύᐔᾩޖᎡᥝዢ̄ᢷᅨҒ๦୤फ़˨֯ᾩ௻зዢ̄

ᾼ۠˞۸ע˦̤˞᎘৕ᅨ֭ࡄ֙ᒽօၶ̀ᾩዢ̄ᢷᅨҒ๦୤फ़෩ዢʷᢷ࢔ᥧ᜿̀ʷන෩ᤵᾩ

ᅨ௻˷डᎡþতύÿޖᅨ10डᎡ׵7෩ࢉᥝ̀ᾩᑉ˅௻зಂޖዢʷᢷᅨ୤फ़ᥝኌ˗ᾩ௻зಂ

ᾩદΡᥧ᜿ዢ̄ᢷ୤फ़యᾩࢡˀთᥧ᜿7׵10ᅨ෩ࢉ̀ᾩዢN-1ύࢡ౅ࡐʽՂᅨಂᲒύᐔǍ̀

୪ʾಭદΡࢉӺʾᅨӰۜύ௻ґᥧ᜿ʷᢷҒ๦୤फ़Ǎ

3.第三趟冒泡排序

第1步进行第一次比较,比对第一位3和第二位1,3>1,交换位置。

第2步进行第二次比较,比对第二位3(因上轮位置交换,此时第二位是3)和第三位6,

3<6,不交换位置。

第3步进行第三次比较,比对第三位6(因上轮位置不交换,此时第三位还是6)和第四位3,

6>3,交换位置。

·10·

正正文.indd文.indd101022020/4/14020/4/14115:54:365:54:36

第1章整理下背包

ᅨ6ᾩՂӠ̀7ᅨʾᯅᾩ˷۞Ӡ̀ᔋठᅨύᐔǍޖᎡᥝዢʼᢷᅨҒ๦୤फ़˨֯ᾩ௻зዢʼ

۸ᥦᢷ୤फ़˗ᾩӁၶ̀ˀ̔୏ύᐔᅨ੏Ҥᾩ۸෩ᤵዢ̄ύ׵ዢʼύయᾩპ̆3<6ᾩӕใ

ᅨ௻δѭ۞Ӡᔋठᅨύᐔᾩ઼Ν෦ޖ಄ᥧ᜿ύᐔ̔୏ǍદΡᇚᦩҒ๦୤फ़ᾩ෦ᢷ୤फ़᧮౅ំ

ᅨ௻᧮ζֲʽþՂÿǍ୪ʾಭદΡࢉӺʾᅨӰʼύ௻ґᥧ᜿ʷᢷҒ๦୤फ़Ǎޖන෩ᤵ֯ᾩ௻з

ᥦయӁၶ̀ʷ˔ާ਎ᅨၶᡔᾞΎʽᯅۭ˗֙ΝʷᆩᆘӁᾩદΡᅨ௻᎖डᎡࡗથ୤फ़̀ᾞ

ᧅદΡᥥបᥧ᜿୪ʾಭᅨ୤फ़ַᾼបᅨᾞ۠˞ΎʽᯅᅨҒ๦୤फ़୬ࢌᥝኌ˗ᾩદΡᇚᦩᾩၶ

ᅨ௻þতύÿ̀ᾩӰʼύᅨ1nj3nj3દΡᥥใሖ࡞ࡐΡᅨෂሖύᐔᾩޖ۸֔಄6nj7nj10௻зӰʼ

ၶ۸֔౅۠˞þҲचÿᾩࡐΡෂ޼۸ᔋठᅨύᐔʽ̀ᾩόદΡϸ࿇ᥥ౅ប࢐ӺʾᅨҒ๦୤फ़

рࡗᾩᥦആૄᒽሖ࡞ࡐΡþতύÿǍ

4.第四趟冒泡排序

第1步进行第一次比较,比对第一位1和第二位3,1<3,不交换位置。

第2步进行第二次比较,比对第二位3和第三位3,此时两个数值相等,我们可以进行位

置交换,也可以不进行位置交换,对最终排序结果没有影响,为了少进行一次交换操作,我

们不交换位置。

·11·

正正文.indd文.indd111122020/4/14020/4/14115:54:365:54:36

哇,编程!——跟小明一起学算法

ᅨ3ᾩՂӠ̀6ᅨʾᯅᾩ˷۞Ӡ̀ᔋठᅨύᐔǍޖᎡᥝዢۜᢷᅨҒ๦୤फ़˨֯ᾩ௻зዢۜ

ᥦʷᢷદΡใ಄ᥧ᜿ʷනύᐔ̔୏ᾩόᦎᥝዢۜᢷᅨҒ๦୤फ़ᾩદΡሖ࡞̀3ᅨύᐔǍ୪ʾ

ಭદΡࢉӺʾᅨӰ̄ύ௻ґᥧ᜿ʷᢷҒ๦୤फ़Ǎ

5.第五趟冒泡排序

ᥧ᜿ዢʷන෩ᤵᾩ෩ࢉዢʷύ1׵ዢ̄ύ3ᾩ1<3ᾩˀ̔୏ύᐔǍ

·12·

正正文.indd文.indd121222020/4/14020/4/14115:54:365:54:36

第1章整理下背包

ᅨ3ᾩՂӠ̀3ᅨʾᯅᾩ˷۞Ӡ̀ᔋठᅨύᐔǍޖᎡᥝዢ̋ᢷᅨҒ๦୤फ़˨֯ᾩ௻зዢ̋

ᥦʷᢷદΡ˷ใ಄ᥧ᜿ʷනύᐔ̔୏Ǎಂ֯ᥥӺʾʷ˔ύᐔᾩ׵ʷ˔ಂ࢓௻᎖ᅨþ1ÿᾩႏ

থ࿇ᾩ1˷۞Ӡ̀ᔋठᅨύᐔǍ઼

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论