算法设计与分析基础

合集下载

学习算法的经典教材推荐

学习算法的经典教材推荐

学习算法的经典教材推荐在计算机科学领域,算法是一门重要的学科。

学习算法不仅可以提高我们解决问题的能力,还可以培养我们的逻辑思维和分析能力。

因此,选择一本好的算法教材是非常重要的。

在本文中,我将向大家推荐几本经典的算法教材,希望对大家的学习有所帮助。

1.《算法导论》(Introduction to Algorithms)《算法导论》是由Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest和Clifford Stein合著的一本经典教材。

这本书系统地介绍了算法设计和分析的基本原理,包括排序、图算法、动态规划等。

它以清晰的语言和丰富的示例,帮助读者理解算法的核心思想和实现细节。

《算法导论》适合作为算法课程的教材,也适合作为算法学习的参考书。

2.《算法(第4版)》(Algorithms, Part I)《算法(第4版)》是由Robert Sedgewick和Kevin Wayne合著的一本经典教材。

这本书以Java语言为基础,介绍了常见的算法和数据结构,包括排序、查找、图算法等。

它不仅提供了清晰的解释和示例代码,还包含了大量的练习题和编程项目,帮助读者巩固所学知识。

《算法(第4版)》适合初学者入门,也适合有一定算法基础的读者进一步深入学习。

3.《算法设计与分析基础》(Foundations of Algorithm Design and Analysis)《算法设计与分析基础》是由王晓东、王晓燕和李海霞合著的一本经典教材。

这本书以算法设计和分析为核心,介绍了常见的算法思想和技术,包括贪心算法、动态规划、分治算法等。

它注重理论与实践的结合,通过真实的案例和实验分析,帮助读者理解算法的应用场景和效果评估。

《算法设计与分析基础》适合计算机科学专业的学生和从业人员,也适合对算法感兴趣的读者。

4.《算法之美》《算法之美》是由吴军著的一本畅销书。

虽然不是传统的教材,但它以通俗易懂的语言,介绍了算法在现实生活中的应用和影响。

算法设计与分析课程教学大纲

算法设计与分析课程教学大纲

算法设计与分析课程教学大纲【适用专业】计算机科学与技术【课时】理论课时:32【学分】 2【课程性质、目标和要求】《算法设计与分析》是计算机科学与技术专业的专业课。

无论是计算科学还是计算实践,算法都在其中扮演着重要角色。

本课程的教学目的是讲授在计算机应用中常常遇到的实际问题的解法,讲授设计和分析各种算法的基本原理、方法和技术,培养学生对算法复杂性进行正确分析的能力。

课程基本要求是⑴掌握算法分析的基本概念和理论。

⑵掌握算法设计技术和分析算法以及算法复杂性。

【教学时间安排】本课程计 2 学分,理论课时32, 学时分配如下:【教学内容要点】第一章算法引论一、学习目的要求1.了解算法的计算复杂性分析方法2.理解算法分析的基本理论3.掌握算法分析的基本概念二、主要教学内容1. 算法的基本概念2. 表达算法的抽象机制3. 采用Java语言与自然语言相结合的方式描述算法的方法4. 算法的计算复杂性分析方法第二章递归与分治策略一、学习目的要求1.理解典型范例中递归与分治策略应用技巧2.掌握递归与分治策略3.掌握数学归纳法证明算法正确性方法二、主要教学内容1. 递归的概念2. 分治法的基本思想3. 二分搜索技术4. 大整数的乘法5. Strassen阵乘法6. 棋盘覆盖7. 合并排序8. 快速排序9. 线性时间选择10. 最接近点对问题11. 循环赛日程表第三章动态规划一、学习目的要求1.理解典型范例中动态规划算法的设计思想2.掌握动态规划算法的基本要求以及算法的设计要点二、主要教学内容1. 矩阵连乘问题2. 动态规划算法的基本要素3. 最长公共子序列4. 最大子段和5. 凸多边形最优三角剖分6. 多边形游戏7. 图像压缩8. 电路布线9. 流水作业调度10. 0—l背包问题11. 最优二叉搜索树12. 动态规划加速原理三、课堂讨论选题1. 最长公共子序列2. 0—l背包问题第四章贪心算法一、学习目的要求1.了解贪心算法的理论基础及基本要素2. 理解典型范例中贪心算法的设计思想3. 掌握贪心算法的设计要点二、主要教学内容1. 活动安排问题2. 贪心算法的基本要素3. 最优装载4. 哈夫曼编码5. 单源最短路径6. 最小生成树7. 多机调度问题8. 贪心算法的理论基础三、课堂讨论选题1. 最优装载2. 单源最短路径第五章回溯法一、学习目的要求1.理解回溯法的效率分析方法2.掌握回溯法的算法框架和应用技巧二、主要教学内容1. 回溯法的算法框架2. 装载问题3. 批处理作业调度4. 符号三角形问题5. n后问题6. 0—l背包问题7. 最大团问题8. 图的m着色问题9. 旅行售货员问题10. 圆排列问题11. 电路板排列问题12. 连续邮资问题13. 回溯法的效率分三、课堂讨论选题1. 0—l背包问题2. 图的m着色问题第六章分支限界法一、学习目的要求1.理解分支限界法的基本思想2.掌握典型范例中分支限界法的应用技巧二、主要教学内容1. 分支限界法的基本思想2. 单源最短路径问题3. 装载问题4. 布线问题5. 0-1背包问题6. 最大团问题7. 旅行售货员问题8. 电路板排列问题9. 批处理作业调度三、课堂讨论选题1. 0-1背包问题2. 批处理作业调度第七章概率算法一、学习目的要求1.理解概率算法的基本思想2.掌握典型范例中概率算法的应用技巧二、主要教学内容1. 随机数2. 数值概率算法3. 舍伍德算法4. 拉斯维加斯算法5. 蒙特卡罗算法第八章 NP完全性理论一、学习目的要求1.了解P类与NP类问题2.了解典型的NP完全问题二、主要教学内容1. 计算模型2. P类与NP类问题3. NP完全问题4. 一些典型的NP完全问题第九章近似算法一、学习目的要求1.掌握近似算法的基本思想2.掌握常用近似算法的应用二、主要教学内容1. 近似算法的性能2. 顶点覆盖问题的近似算法3. 旅行售货员问题近似算法4. 集合覆盖问题的近似算法5. 子集和问题的近似算法第十章算法优化策略一、学习目的要求1.掌握算法优化策略2.掌握算法优化的基本方法二、主要教学内容1. 算法优化策略的比较与选择2. 动态规划加速原理3. 问题的算法特征4. 优化数据结构5. 优化搜索策略【教学(实验)内容要点】算法设计与分析实验是算法设计与分析课的一个实践性教学环节。

算法分析与设计基础答案11章

算法分析与设计基础答案11章
f matrices and through a transformation to a product of two symmetric matrices if ∙ ¸ ∙ ¸ 1 −1 0 1 = and = 2 3 −1 2 10. a. Can one use this section’s formulas that indicate the complexity equivalence of multiplication and squaring of integers to show the complexity equivalence of multiplication and squaring of square matrices? b. Show that multiplication of two matrices of order can be reduced to squaring a matrix of order 2 11. Find a tight lower bound class for the problem of finding two closest numbers among real numbers 1 2 ..., . 12. Find a tight lower-bound class for the number placement problem (Problem 9 in Exercises 6.1).
This file contains the exercises, hints, and solutions for Chapter 11 of the book ”Introduction to the Design and Analysis of Algorithms,” 3rd edition, by A. Levitin. The problems that might be challenging for at least some students are marked by B; those that might be difficult for a majority of students are marked by I

《算法设计与分析基础(第3版)》第一,二章部分习题答案

《算法设计与分析基础(第3版)》第一,二章部分习题答案

作业一学号:_____ 姓名:_____说明:1、正文用宋体小四号,1.5倍行距。

2、报告中的图片、表格中的文字均用宋体五号,单倍行距。

3、图片、表格均需要有图片编号和标题,均用宋体五号加粗。

4、参考文献用宋体、五号、单倍行距,请参照参考文献格式国家标准(GB/T 7714-2005)。

5、公式请使用公式编辑器。

P144.用伪代码写一个算法来求方程ax2+bx+c=0的实根,a,b,c 是任意实系数。

(可以假设sqrt(x)是求平方根的函数。

)算法:Equate(a,b,c)//实现二元一次方程求解实数根//输入:任意系数a,b,c//输出:方程的实数根x1,x2或无解If a≠0p←b2−4acIf p>0x1←−b+sqrt(p)2ax2←−b−sqrt(p)2areturn x1,x2else if p=0return −b2aelsereturn “no real roots”elseif b≠0return −cbelseif c≠0return “no real numbers”elsereturn “no real roots”5.写出将十进制正整数转换为二进制整数的标准算法。

a.用文字描述。

b.用伪代码描述。

a.解:输入:一个正整数n输出:正整数n相应的二进制数第一步:用n 除以2,余数赋给K[i](i=0,1,2...),商赋给n第二步:如果n=0 ,则到第三步,否则重复第一步第三步:将K[i]按照i从高到低的顺序输出b.解:算法:DecToBin(n)//实现正整数十进制转二进制//输入:一个正整数n//输出:正整数n对应的二进制数组K[0..i]i ←1while n≠0 doK[i]←n%2n←(int)n/2i ++while i≠0doprint K[i]i - -p462.请用O,Ω 和θ的非正式定义来判断下列断言是真还是假。

a. n(n+1)/2∈O(n3)b. n(n+1)/2∈O(n2)c. n(n+1)/2∈θ(n3)d. n(n+1)/2∈Ω(n)解:断言为真:a,b,d断言为假:cP535.考虑下面的算法。

算法设计与分析-王-第1章-算法设计基础

算法设计与分析-王-第1章-算法设计基础

2)有没有已经解决了的类似问题可供借鉴?
1.4 算法设计的一般过程
在模型建立好了以后,应该依据所选定的模型对问 题重新陈述,并考虑下列问题: (1)模型是否清楚地表达了与问题有关的所有重要
的信息?
(2)模型中是否存在与要求的结果相关的数学量? (3)模型是否正确反映了输入、输出的关系? (4)对这个模型处理起来困难吗?
程序设计研究的四个层次:
算法→方法学→语言→工具
理由2:提高分析问题的能力
算法的形式化→思维的逻辑性、条理性
1.2 算法及其重要特性
一、算法以及算法与程序的区别
例:欧几里德算法——辗转相除法求两个自然数 m 和 n 的最大公约数
m n
欧几里德算法
r
1.2 算法及其重要特性
欧几里德算法
① 输入m 和nห้องสมุดไป่ตู้如果m<n,则m、n互换;
对不合法的输入能作出相适应的反映并进行处理。 (2) 健壮性(robustness): 算法对非法输入的抵抗能力, 即对于错误的输入,算法应能识别并做出处理,而不是 产生错误动作或陷入瘫痪。 (3)可读性:算法容易理解和实现,它有助于人们对算 法的理解、调试和修改。 (4) 时间效率高:运行时间短。 (5) 空间效率高:占用的存储空间尽量少。
算法设计与分析
Design and Analysis of Computer Algorithms
高曙
教材:

算法设计与分析(第二版),清华大学出版社,王红梅, 胡明 编著
参考书目:

Introduction to Algorithms, Third Edition, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest,机械工 业出版社,2012

算法设计实训报告

算法设计实训报告

一、实训背景随着计算机科学技术的飞速发展,算法作为计算机科学的核心,其设计与应用越来越受到重视。

为了提高我们的算法设计能力,培养解决实际问题的能力,我们开展了为期一个月的算法设计实训。

本次实训以《算法设计与分析》课程为基础,通过理论学习、实验操作和实践应用,使我们深入理解了算法的基本概念、设计方法和分析技巧。

二、实训内容1. 理论学习(1)回顾了算法的基本概念,包括算法、算法复杂度、时间复杂度和空间复杂度等。

(2)学习了常用的算法设计方法,如分治法、动态规划、贪心算法、回溯法等。

(3)了解了不同算法的应用场景和适用范围。

2. 实验操作(1)使用C++语言实现了多种算法,如快速排序、归并排序、二分查找、插入排序等。

(2)针对实际问题,设计了相应的算法,如矩阵链相乘、背包问题、最小生成树等。

(3)对实验结果进行了分析,对比了不同算法的性能。

3. 实践应用(1)以小组为单位,针对实际问题进行算法设计,如数字三角形、投资问题等。

(2)编写程序代码,实现所设计的算法。

(3)对程序进行调试和优化,提高算法效率。

三、实训成果1. 提高了算法设计能力:通过实训,我们掌握了多种算法设计方法,能够根据实际问题选择合适的算法。

2. 增强了编程能力:实训过程中,我们熟练掌握了C++编程语言,提高了编程技巧。

3. 深化了算法分析能力:通过对算法复杂度的分析,我们能够更好地理解算法性能。

4. 培养了团队合作精神:在实训过程中,我们学会了与他人沟通、协作,共同完成任务。

四、实训总结1. 实训过程中,我们遇到了许多困难,如算法设计思路不明确、编程错误等。

通过查阅资料、请教老师和同学,我们逐步克服了这些问题。

2. 实训过程中,我们认识到算法设计的重要性。

一个好的算法可以显著提高程序运行效率,解决实际问题。

3. 实训过程中,我们学会了如何将实际问题转化为数学模型,并设计相应的算法。

4. 实训过程中,我们提高了自己的自学能力和解决问题的能力。

算法设计与分析(第2版) 郑宗汉 第1章-1

算法设计与分析(第2版) 郑宗汉 第1章-1

8
Байду номын сангаас
学习要求
深刻理解每一类算法的思想及其实现
能熟练运用所学知识解决实际问题
培养提高计算思维能力
9
考核方式
Homework and Reading: 20%
Final Exam (Written Test): 80%
10
第1章 算法的基本概念
1.1 引言
1.1.1 算法的定义和特性
c %3 0
(1.1.3)
16
1.1.2 算法的设计和复杂性分析
百鸡问题的穷举法
输入:所购买的3种鸡的总数目n 输出:满足问题的解的数目k,公鸡,母鸡,小鸡的只数g[],m[],s[]
1. void chicken_question(int n, int &k, int g[], int m[], int s[]) 2. { 3. int a,b,c; 分析发现:只能买到n/5 4. k = 0; 只公鸡,n/3只母鸡,将 5. for (a = 0; a <= n; a++) { 算法进行改进。 6. for ( b = 0; b <= n; b++) { 7. for (c = 0; c <= n; c++) { 8. if ((a + b + c == n) && (5 * a + 3 * b + c / 3 == n) && (c%3 == 0)) { 9. g[k] = a; 10. m[k] = b; 11. s[k] = c; 12. k++; 13. } 14. } 15. } 16. } 17. }

《算法设计与分析》(全)

《算法设计与分析》(全)
巢湖学院计算机科学与技术系
1.1、算法与程序
程序:是算法用某种程序设计语言的具体实现。 程序可以不满足算法的性质(4)。 例如操作系统,是一个在无限循环中执行的程序, 因而不是一个算法。 操作系统的各种任务可看成是单独的问题,每一个 问题由操作系统中的一个子程序通过特定的算法来实 现。该子程序得到输出结果后便终止。
渐近分析记号的若干性质
(1)传递性: ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); ➢ f(n)= O(g(n)), g(n)= O (h(n)) f(n)= O (h(n)); ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); ➢ f(n)= o(g(n)), g(n)= o(h(n)) f(n)= o(h(n)); ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); (2)反身性: ➢ f(n)= (f(n));f(n)= O(f(n));f(n)= (f(n)). (3)对称性: ➢ f(n)= (g(n)) g(n)= (f(n)) . (4)互对称性: ➢ f(n)= O(g(n)) g(n)= (f(n)) ; ➢ f(n)= o(g(n)) g(n)= (f(n)) ;
巢湖学院计算机科学与技术系
渐近分析记号的若干性质
规则O(f(n))+O(g(n)) = O(max{f(n),g(n)}) 的证明: ➢ 对于任意f1(n) O(f(n)) ,存在正常数c1和自然数n1,使得对
所有n n1,有f1(n) c1f(n) 。 ➢ 类似地,对于任意g1(n) O(g(n)) ,存在正常数c2和自然数
巢湖学院计算机科学与技术系
第1章 算法引论
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法分析基本方法



• 算法原理及应用
空间复杂性
算法的空间复杂性指算法执行过程中所 需的内存空间 (即辅助空间),不包括存储输入所用的空间。
空间复杂性的分析类似于时间复杂性。

时间和空间资源的权衡
算法分析基本方法


• 算法原理及应用
算法时间复杂性的估计
计算迭代(循环)次数 算法的时间复杂性往往取决于算法所执行的循环 次数,该情况下只要计算算法中最大的循环次数。 基本运算:(定义1.6 P24) 例:基于比较的查找和排序算法中的比较运算。 利用递推(递归)关系
● 定理2.1的应用 (P45)

f x f(x)
数学预备知识
• 算法原理及应用
一. 算法分析中相关的数学工具 (2.1~2.7)
3. 阶乘和二项式系数(排列和组合)
● Stirling公式: n!
2n n e
n n n 0 1
n
●关于二项式系数的有关公式:
n n k n - k
n n -1 n -1 k k k -1
1 x
n
n j j x j0
算法分析基本方法


• 算法原理及应用
计算复杂性
对于实际可接受的同一问题,不同算法可能在效率上 有很大差异。(当问题规模充分大时)
例1.4 两种排序算法的比较 (P12)
n (排序数据个数) SELECTSORT (选择排序) MERGESORT (归并排序)
n=128时的比较时间 n=220时的比较时间
算法原理及应用
——算法设计与分析基础之一
算法设计与分析基础
• 算法原理及应用
内容


算法分析基本方法
常用算法设计技术
算法分析基本方法


• 算法原理及应用
算法
D.E.Knuth的非形式化定义 一个算法,就是一个有穷规则(指令)集合。它 为某个特定类型问题提供了解决问题的运算序列。 算法的五个特性 1. 有穷性 2. 确定性 4. 输出 5. 输入
该方程的解为C(n)=1+ log 2 n 。 该算法的时间复杂性为O(log n)。
算法分析基本方法


• 算法原理及应用
最坏情况和平均情况时间复杂性的估计
最坏情况下时间复杂性 W(n)= maxt (I)
IDn
其中,Dn是大小为n的输入集合, t(I)是输入为I时算法的运算时间。
算法分析基本方法
Θ(np)称多项式阶,Θ(logq n)称对数阶,Θ(an)称指数阶。
算法分析基本方法


• 算法原理及应用
时间复杂性的阶
函数阶的估计:
取最高阶的项估计,且可忽略常数因子 。
例:f(n)=amnm + am-1nm-1+…+ a1n + a0
利用不等式估计:
例1.12, 1.13 (P17-18)
Θ(1) Θ(n) Θ(np) Θ(log n) Θ(an) Θ(n!) Θ(nn)
其中,p, q>0 , a>1。 阶的大小的比较: 常用阶的比较
Θ(np logq n)
算法分析基本方法



• 算法原理及应用
时间复杂性的阶
阶的比较方法:根据O,ห้องสมุดไป่ตู้Ω, Θ的定义,利用已知结论, 利用极限运算等。
f(n)= Θ(g(n))当且仅当 f(n)= O(g(n)) 且 f(n)= Ω(g(n))
算法分析基本方法


• 算法原理及应用
时间复杂性的概念
增长率(在忽略常数因子的前提下)
f(n)=O(g(n)): f(n)的增长率不高于g(n), f(n)的阶<=g(n)的阶。
f(n)=Ω(g(n)): f(n)的增长率不低于g(n), f(n)的阶>=g(n)的阶。
• 算法原理及应用
void select_sort(int& a[], int n) { // 将 a 中整数序列重新排列成自小至大有序的整数序列。
for ( i = 0; i< n-1; ++i ) { j = i; // 选择第 i 个最小元素 for ( k = i+1; k < n; ++k ) if (a[k] < a[j] ) j = k; if ( j != i ) a[j] ←→ a[i] } 基本操作: } // select_sort 比较(数据元素)操作
赋值操作 时间复杂度: O(n2)
基本操作:
算法分析基本方法
时间复杂性的概念
• 算法原理及应用
从实际出发,算法的时间复杂性分析不必精确计 算(近似的),而且只关心问题规模充分大时的情况 (增长率)。 算法的渐进时间复杂性指当问题规模充分大时, 对时 间复杂性的估计,用O, Ω, Θ估计。 O, Ω, Θ的定义(P15-16 定义1.2-1.4) f(n)= Ω(g(n)) 当且仅当 g(n)=O(f(n))
算法分析基本方法
两个本质上相似的悖论:

• 算法原理及应用
理发师悖论:村子里有个理发师,这个理发师有条原则 是,对于村里所有人,当且仅当这个人不自己理发,理 发师就给这个人理发。如果这个人自己理发,理发师就 不给这个人理发。无法回答的问题是,理发师给自己理 发么?
停机测试悖论:计算机里有个测试程序,这个测试程序 的原则是,对于计算机里所有程序,当且仅当这个程序 不递归调用自己(输出停机),测试程序就调用它(对应 不停机)。如果这个程序递归调用自己(对应不停机), 测试程序就不调用它(对应停机)。无法回答的问题是, 测试程序递归调用自己么?
for (i=1; i<=n; ++i) for (j=1; j<=n; ++j) { c[i,j] = 0; for (k=1; k<=n; ++k) c[i,j] += a[i,k]*b[k,j]; } //for } //mult 基本操作:
乘法操作 O(n3)
时间复杂度:
例 二 选 择 排 序


• 算法原理及应用
最坏情况和平均情况时间复杂性的估计
平均情况下时间复杂性
A(n)
IDn
p(I)t(I)
其中,Dn是大小为n的输入集合,
t(I)是输入为I是时算法的运算时间,
p(I)是输入I出现的概率。
数学预备知识
• 算法原理及应用
一. 算法分析中相关的数学工具 (2.1~2.7)
1. 集合、关系、函数、对数和证明方法
3. 可行性
算法分析基本方法


• 算法原理及应用
可计算性
可计算性理论研究问题的可解性。 “几乎所有”的问题都计算机不可解。 可解问题集合为可数的(对应整数集) 所有问题集合为不可数的(对应实数集) 不可解问题集合为不可数的。
算法分析基本方法


• 算法原理及应用
可计算性

不可解问题之例:
2.底函数和顶函数 (2.4
● 相关性质: (1)
P45)
x/2 x/2 = x , x为整数
(2) - x -x - x -x , x为实数
(3) 定理2.1 设f(x)是单调递增连续函数,使得若f(x)是整数,则x是
整数。那么,
f x f(x)

停机问题证明 设停机问题有解,即:存在过程H(P, I)可以给出 程序P在输入I的情况下是否可停机。假设若P在输 入I时可停机,H输出“停机”,反之输出“死循 环”,即可导出矛盾: 显然,程序本身可以被视作数据,因此它可以被 作为输入,故H应该可以判定当将P作为P的输入 时,P是否会停机。所以我们设过程K(P)的流程如 下:首先,它调用H(P, P),如果H(P, P)输出“死 循环”,则K(P)停机,反之K(P)死循环。即K(P)做 与H(P, P)的输出相反的动作。
• 算法原理及应用
从算法中选取一种对于所研究的问
题来说是 基本操作 的原操作,以该
基本操作 在算法中重复执行的次数 作为算法运行时间的衡量准则。
例 一 两 个 矩 阵 相 乘 void mult(int a[], int b[], int& c[] ) {
• 算法原理及应用
// 以二维数组存储矩阵元素,c 为 a 和 b 的乘 积
0.08秒 6.4天
0.008秒 20秒
算法分析基本方法


• 算法原理及应用
时间复杂性的概念
算法的时间复杂性指算法中元运算的执行次 数,其 为问题规模的函数。 元运算(定义1.1, P14) 常见的元运算:基本算术运算、逻辑运算、赋值 运算等。 问题规模通常指输入大小(输入数据量的大小)。
时间复杂度:
O(n2)
例 三
• 算法原理及应用
起 泡 排 序
void bubble_sort(int& a[], int n) { // 将 a 中整数序列重新排列成自小至大有序的整数序列。 for (i=n-1, change=TRUE; i>1 && change; --i) { change = FALSE; // change 为元素进行交换标志 for (j=0; j<i; ++j) if (a[j] > a[j+1]) { a[j] ←→ a[j+1]; change = TRUE ;} } // 一趟起泡 } // bubble_sort
相关文档
最新文档