匿名用户

1级

2009-10-25 回答

下面是C语言里面常用的三种比较排序方法:

一、冒泡法(起泡法)

算法要求:用起泡法对10个整数按升序排序。

算法分析:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前往后,经过一趟比较后,将最值沉底(换到最后一个元素位置),最大值沉底为升序,最小值沉底为降序。

算法源代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

# include

main()

{

inta[10],i,j,t;

printf("Please input 10 numbers: ");

/*输入源数据*/

for(i=0;i<10;i++)

scanf("%d",&a[i]);

/*排序*/

for(j=0;j<9;j++)       /*外循环控制排序趟数,n个数排n-1趟*/

for(i=0;i<9-j;i++)      /*内循环每趟比较的次数,第j趟比较n-j次*/

if(a[i]>a[i+1])       /*相邻元素比较,逆序则交换*/

{ t=a[i];

a[i]=a[i+1];

a[i+1]=t;

}

/*输出排序结果*/

printf("The sorted numbers: ");

for(i=0;i<10;i++)

printf("%d   ",a[i]);

printf("\n");

}

算法特点:相邻元素两两比较,每趟将最值沉底即可确定一个数在结果的位置,确定元素位置的顺序是从后往前,其余元素可能作相对位置的调整。可以进行升序或降序排序。

算法分析:定义n-1次循环,每个数字比较n-j次,比较前一个数和后一个数的大小。然后交换顺序。

二、选择法

算法要求:用选择法对10个整数按降序排序。

算法分析:每趟选出一个最值和无序序列的第一个数交换,n个数共选n-1趟。第i趟假设i为最值下标,然后将最值和i+1至最后一个数比较,找出最值的下标,若最值下标不为初设值,则将最值元素和下标为i的元素交换。

算法源代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# include

main()

{

inta[10],i,j,k,t,n=10;

printf("Please input 10 numbers:");

for(i=0;i<10;i++)

scanf("%d",&a[i]);

for(i=0;i

{

k=i;                /*假设当前趟的第一个数为最值,记在k中 */

for(j=i+1;j

if(a[k]

k=j;            /*则将其下标记在k中*/

if(k!=i)               /*若k不为最初的i值,说明在其后找到比其更大的数*/

{  t=a[k];  a[k]=a[i];  a[i]=t;  }    /*则交换最值和当前序列的第一个数*/

}

printf("The sorted numbers: ");

for(i=0;i<10;i++)

printf("%d   ",a[i]);

printf("\n");

}

算法特点:每趟是选出一个最值确定其在结果序列中的位置,确定元素的位置是从前往后,而每趟最多进行一次交换,其余元素的相对位置不变。可进行降序排序或升序排序。

算法分析:定义外部n-1次循环,假设第一个为最值,放在参数中,在从下一个数以后找最值若后面有比前面假设的最值更大的就放在k中,然后在对k进行分析。若k部位最初的i值。也就是假设的i不是最值,那么就交换最值和当前序列的第一个数

三、插入法

算法要求:用插入排序法对10个整数进行降序排序。

算法分析:将序列分为有序序列和无序列,依次从无序序列中取出元素值插入到有序序列的合适位置。初始是有序序列中只有第一个数,其余n-1个数组成无序序列,则n个数需进n-1次插入。寻找在有序序列中插入位置可以从有序序列的最后一个数往前找,在未找到插入点之前可以同时向后移动元素,为插入元素准备空间。

算法源代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# include

main()

{

inta[10],i,j,t;

printf("Please input 10 numbers: ");

for(i=0;i<10;i++)

scanf("%d",&a[i]);

for(i=1;i<10;i++)        /*外循环控制趟数,n个数从第2个数开始到最后共进行n-1次插入*/

{

t=a[i];                /*将待插入数暂存于变量t中*/

for( j=i-1 ; j>=0 && t>a[j] ; j-- )     /*在有序序列(下标0 ~ i-1)中寻找插入位置*/

a[j+1]=a[j];         /*若未找到插入位置,则当前元素后移一个位置*/

a[j+1]=t;           /*找到插入位置,完成插入*/

}

printf("The sorted numbers: ");

for(i=0;i<10;i++)

printf("%d   ",a[i]);

printf("\n");

}

C语言比较法排大小,c语言 比较法排序区别相关推荐

  1. 排座系统c语言,2008noip排座位C语言详解.doc

    2008noip排座位C语言详解 2008noip排座位C语言详解 2.排座椅 (seat.pas/c/cpp)D对同学上课时会交头接耳.同学们在教室中坐成了M行N列,坐在第i行第j列 的同学的位置是 ...

  2. c语言单精度比大小,c语言单精度和双精度的区别.pdf

    c 语言单精度和双精度的区别 c 语言单精度和双精度的区别单精度是这样的格式, 1 位符号, 8 位指数, 23 位小数. 双精度是 1 位符号, 11 位指数, 52 位小数. 区别就是它所能存储的 ...

  3. 数字排大小C语言怎么编写,C语言排列数字大小

    优质回答 回答者:Paksun 排序数组可以使用冒泡算法:如果前一个数据比后一个大,则交换.#include //使用冒泡算法升序数组src voidsort(int*src,intlen) { in ...

  4. c语言设置bufsiz大小,c语言缓冲区有关问题及c++中的this指针

    c语言缓冲区问题及c++中的this指针 1.怎么改变c中缓冲区的大小,使用setbuf[stout,buf];改变buf的大小并不能改变缓冲区的大小,而函数 说明中要求把buf大小设置成BUFSIZ ...

  5. 如何c语言看字节大小,C语言字节大小day5

    计算字节大小 int, float, double 和 char 字节大小 F11运行 注解: 长度就是有几个字符,字节就是这个字符数组共有几个元素. 2.一个字节的长度为8bit,数据的长度由数据的 ...

  6. c语言union内存大小,C语言、C++中的union用法总结

    开始的话 已经好长时间没有更新了,对不起自己,更对不起我亲爱的读者,同时也对不起自己开办的这个博客平台.忙,太忙了,忙于找工作,找一份好工作,纠结于去大城市闯呢,还是回到本省的首府城市.大家都在纠结这 ...

  7. c语言 switch语句大小,C语言switch语句(板式整齐)

    <C语言switch语句(板式整齐)>由会员分享,可在线阅读,更多相关<C语言switch语句(板式整齐)(38页珍藏版)>请在人人文库网上搜索. 1.switch 语句,1, ...

  8. c语言比较当前日期大小,C语言判断两个日期只差的方法

    C语言判断两个日期只差的方法 尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以 ...

  9. 函数c语言桶排算法,C语言基本排序算法之桶式排序实例

    本文实例讲述了C语言基本排序算法之桶式排序.分享给大家供大家参考,具体如下: 桶式排序是对一个有n个整型元素的数组a[n],其中对任意i,0 <= a[i] <= m的特殊排序算法. 可以 ...

最新文章

  1. 删除ctrl alt del更改密码
  2. 如何解决设置虚拟服务器不生效,nginx虚拟主机的配置不生效
  3. oracle用hints调优,oracle hints的那点事
  4. Memcached 及 Redis 架构分析和比较
  5. java加载机制_详解Java类加载机制
  6. php-cs-fixer不起作用,使用 PHP-CS-Fixer 规范PHP代码
  7. 万字干货:阿里巴巴是怎么做大数据算法应用测试的? | 凌云时刻
  8. 部分拆解笔记本电脑(联想y580)
  9. COSCon'20 Apache Roadshow- China 精彩收官!|会场精彩回顾篇
  10. 数学建模学习笔记(1):层次分析法(AHP)(附有详细使用步骤)
  11. 3D游戏里的男女性角色模型是这样建模出来的
  12. 蓝牙硬件设备没有链接到计算机,电脑连接蓝牙却搜索不到蓝牙设备怎么办
  13. Java集合中Set
  14. Windows服务器如何防止黑客入侵的安全设置
  15. 全网最简单的百度网盘提速方法!!!!
  16. SourceTree使用方法总结
  17. 身为程序员还看不懂UML类图? 一文带你零基础学会看UML类图!
  18. 让linux后台持续运行某个程序
  19. 利用COORD软件进行坐标七参数转换
  20. 浏览器真的能“永不假死”?——六款主流浏览器防假死功能测试

热门文章

  1. python3 str bytes bytearray 互相转换
  2. docker 占用磁盘空间清理 无用数据卷删除
  3. Cmake知识----编写CMakeLists.txt文件编译C/C++程序
  4. linux gcc 包含头文件 动态库 静态库 链接路径问题
  5. OD命令大全(OllyDbg命令)
  6. 面试题目集锦--链表
  7. Linux命令的实现 -- ls pwd cd
  8. TAP/TUN Vnet veth
  9. NeHe教程Qt实现——lesson03
  10. 计算机会计的应用控制主要有哪些,计算机会计习题全多选