- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
冒泡排序算法
在解释冒泡排序算法之前,先来介绍把 10 个数(放在数组 A 中)中最大的那个数放在最后位置上的一种算法。算法描述如下:
(1)从数组A[1]到A[10],把相临的两个数两两进行比较。即A[1]和A[2]比较, 比较完后A[2]再与A[3]比较,……最后是A[9]和A[10]比较。
(2)在每次进行比较的过程中,如果前一个数比后一个数大,则对调两个数,也 就是说把较大的数调到后面,较小的调到前面。比如在第一次的比较中,如果 A[1]比 A[2] 大则A[1]和A[2]的值就互换。下图用 6 个数据来说明以上的算法。
假设 6 个数据是:A[]=5 7 4 3 8 6 A[1] A[2] A[3] A[4] A[5] A[6]
5 7 4 3 8 6 第一次,A[1]=5 和 A[2]=7 比较,75,不进
行对调。
进行对调,
7 3 8 6
进行对调,
3 7 8 6
不进行对调。
进行对调,
是
5 7 4 3 8 6 第二次,A[2]=7 和A[3]=4 比较,47,
那么第二次比较完后的数据是 5 4
5 4 7 3 8 6 第三次,A[3]=7 和A[4]=3 比较,37,
那么第三次比较完后的数据是 5 4
5 4 3 7 8 6 第四次,A[4]=7 和A[5]=8 比较,87,
5 4 3 7 8 6 第五次,A[6]=6 和A[5]=8 比较,68,
那么第五次也就是最后一次的结果
5 4 3 7 6 8
由上例可以看出,对于 6 个数,排好一个数(最大的数)需要进行 5 次比较,可以推断出,对于N 个数,一趟需要 N-1 次比较操作,
上述算法已经把 N 个数中最大的数放到了 A[N]中,再重复上述算法,把 A[1]到A[N-1]中最大的数放到 A[N-1]中,这样 A[N-1]中存放的就是第二大的数,接着把 A[1] 到 A[N-2]中最大的数放到A[N-2]中,……最后把 A[1]到 A[2]中大的那个数放到A[2]中,
每重复一次两两比较后,比较的范围就朝前移动一个位置,此算法经过N-1 次就完成了
A[1]到A[N]中的的数由小到大的排列。
注意:如果要由大到小排列则在比较时前一个数比后一个数小就进行对调,方法相反。由此可以看出,冒泡法的基本思想就是:在待排序的数据中,先找到最小(大)的
数据将它放到最前面,再从第二个数据开始,找到第二小(大)的数据将它放到第二个位置,以此类推,直到只剩下最后一个数为止。这种排序方法在排序的过程中,是小的数就如气泡一样逐层上浮,而使大的数逐个下沉,于是就形象地取名为冒泡排序,又名起泡排序。
冒泡排序可用图 3 所示的流程图表示:
开 始J:=1 I:=1
N
A[I]A[I+1]
A[I]与 A[I+1]对调
Y
I:=I+1
IN--J
N
Y
J:=J+1
N
JN--1
Y
结 束
图 3 冒泡排序算法程序流程图
程序举例:
程序要求: 从键盘输入十个数,然后按从小到大的顺序输出。程序代码:
program bubble(input,output); const n=10;
type
colarr=array[1..n] of integer; var
a:colarr; t,i,j:integer; begin
writeln(‘INPUT 10 integer num:’);
for I:=1 to n do read(a[I]); readln;
for j:=1 to n-1 do
for I:=1 to n-j do
if a[I]a[I+1] then begin
t:=a[I];a[I]:=a[I+1];a[I+1]:=t
end; writeln(‘OUTPUT new num:’); for I:=1 to n do
begin
write(a[I]:4);
if I mod 5=0 then writeln end;
end.
程序运行结果如下:
input 10 integer num: {提示输入 10 个数}
7 6 23 21 19 18 10 16 5 13 {假如输入的数据}
output new num: {冒泡排序后输出结果} 5 6 7 10 13
16 18 19 21 23
选择排序算法
在介绍选择排序法之前先介绍一种把最小的数放在第一个位置上的算法,当然也 可以用前面所讲的冒泡排序法,现在我们改用一种新的算法:其指导思想是先并不急于 调换位置,先从 A[1]开始逐个检查,看哪个数最小就记下该数所在的位置P,等一躺扫 描完毕,再把 A[P]和A[1]对调,这时 A[1]到A[10]中最小的数据就换到了最前面的位置。算法的步骤如下:
、先假设 A[1]中的数最小,记下此时的位置P=1;
、依次把 A[
文档评论(0)