02年06月01日排序分类_第1页
02年06月01日排序分类_第2页
02年06月01日排序分类_第3页
02年06月01日排序分类_第4页
02年06月01日排序分类_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

分类(排序)—外部排序二内部排序1.选择排序2.冒泡排序3.快速排序选择排序基本思想:首先从要排序的数中选择最大的数,将它放在第一个位置,然后从剩下的数中选择最大的数放在第二个位置,如此继续,直到最后从剩下的两个数中选择最大的数放在倒数第二个位置,剩下的一个数放在最后位置,完成排序。例:把下列数从大到小排序:4

5

7

1

23I

=1745123I

=2754123I

=3754123I

=4754312I

=5754321输入A(N)各值I 1

TO

N-1J I+1

TO

NA[I]<A[J]YN交换A[I]与A[J]的值输出排序后的结果流程图:K

IJ I+1

TO

NA[K]<A[J]NI<>JYNK

JY交换A[K]与A[J]的值输出排序后的结果优化后的选择排序算法:输入A[N]各值I 1

TO

N-1冒泡排序基本思想:依次比较相邻的两个数,将大数放在前面,小数放在后面。即首先比较第1个数和第2个数,将大数放前,小数放后,然后比较第2个数和第3个数,大数放前,小数放后,如此继续,直到比较最后两数,大数放前,小数放后,至此第一趟结束,此时在最后一个位置上放的必是所有数中最小的数。重复以上过程,从第一个数开始,直比到最小数前的一对相邻数,至此次小数被放在了倒数第二个位置上,如此继续,直到最后一趟。例:把下列数从大到小排序:第一趟结束457123547123574123574123574213574231754231754231754231754321输入数组各值I

1

TO

N-1J

1

TO

N-IA[J]<A[J+1]YN交换A[J]和A[J+1]输出排序结果流程图:A[j]<A[j+1]yn交换A[j]和A[j+1]Flag

falsei

i+1Flag=true输出排序结果优化后的冒泡排序算法:输入数组各值

;

i

1;Flag

trueJ 1

to

n-i快速排序基本思想:从欲排序的数列中取一合适的数K,以K为标准把要排序的N个数分成两部分,一部分是比K小的,一部分是比K大的,即把数列分成:(小于K部分)K(大于K部分),然后对这两部分分别按此方法继续进行分组,直到被分成的每一部分都只含有一个数据为止.算法:将参加排序的数据放入一个数组A中,假定为A1,A2,…,An;将数组A重新组织成A’,A1,A”.其中A’是所有小于A1的数据的集合,A”是所有不小于

A1的数据的集合.对A’,A”重复步骤2,直到每个集合都只有一个数据,排序完毕.例:对下列数按从小到大排序3

9

1

6

5

4

8

2

10

72)指针j向左移动,直到碰到比3小的数为止,本例为23

9

1

6

5

4

8

2

10

7ij2与3互换得2

9

1

6

5

4

8

3

10

7ji1)引进指针i和j分别指向数列的开始和终止,并利用最左端的数据作为k3

9

1

6

5

4

8

2

10

7ijK=33)指针i向右移动,直到遇到比3大的数据为止.本例为9.2

9

1

6

5

4

8

3

10

7i

j9与3互换得2

3

1

6

5

4

8

9

10

74)对指针i和指针j间的序列继续以上(1)-(3)步骤直到指针重合为止,第一轮结束.把序列分成比3小的和比3大的两部分:231654891072i1j365489107ij6

5

4

8

9

10

7K=6i

j6

5

4

8

9

10

7j从往左找比6小的i

j4

5

6

8

9

10

74,6互换i右移,找6大的i

j4

5

6

8

9

10

7i

j4

5

6

8

9

10

7ij直到i,j重合这一轮结束开始7小于8,j不动

7,8互换i向右移,找比8大的8,9互换j向左移,找比8小的8

9

10

7i

j7

9

10

8i

j7

9

10

8i

j7

8

10

9i

j7

8

10

9ij直到i,j重合,此轮结束8

9

10

7ji7

9

10ji7

9

10i7i7j10

9j10

9ij7

8

10

9ij算法:(过程qk_sort(I,j)){I为1,J为n}a[i];left

i,

right j;

k重复只要I<j且a[j]>=k,循环j j-1;如果I<j,

则a[i]

a[j];只要I<j且a[I]<k,循环I

I+1;如果I<j,则a[j]

a[i];直到I=j;A[i]

k如果两部分数列长度均不为1,则重复

qk_sort(left,I-1);qk_sort(j+1,rLeft I;

right j;

k

a

温馨提示

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

评论

0/150

提交评论