C语言将有序数排为从小到大,C语言数据排序专题复习.doc

本文详细介绍了C语言中的两种基本排序算法:冒泡排序和选择排序。冒泡排序通过不断交换相邻元素实现排序,而选择排序则在每轮找出最大值或最小值并定位。通过代码示例展示了两种排序方式的实现过程,有助于理解排序算法的工作原理。
摘要由CSDN通过智能技术生成

C语言数据排序专题复习

C语言数据排序专题复习

排序是将一个无序的数据序列按照某种顺序重新排列。用数组存放要排序的数据序列。本专题介绍几种常用的排序方法,均假设数据从小到大排序。

1.冒泡排序(又称起泡法)

基本思路:每轮排序找余下的数据中的最小值定位在最前,故每经过一轮排序确定一个位置,余下的数据就减少一个。n个数排序要经过n-1轮排序。排序要用二重循环实现,外循环表示排序的轮次,内循环示每轮排序将最小值交换到最前面。(以10个数从小到大排序为例)

第1轮排序,下标i的值为0,找a[0]---a[9],10个数中找最小值,将最小值交换到a[0]位置,最小值初值为a[0],要将a[1]---a[9]每个元素逐一与a[0]比较,如果比a[0]小,就与a[0]交换。

第2轮排序,下标i的值为1,找a[1]—a[9],9个数中找最小值,将最小值交换到a[1]

位置,最小值初值为a[1],要将a[2]---a[9]每个元素逐一与a[1]比较,如果比a[1]小,就与a[1]交换。

依次类推。

10个数排序,外循环变量i的取值从0----8(小于9)表示要经过9轮排序,注意观察

i=0,第1轮排序,内循环与最小值比较的元素是a[1]到a[9],

i=1,第2轮排序,内循环与最小值比较的元素是a[2]到a[9],

内循环用j表示元素下标,终值固定为9,初值i=0时,j=1;i=1时,j=2;j=i+1

程序清单:main()

{ int i,j,a[10],t; /*t用于交换的变量*/

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

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

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

for(j=i+1;j<10;j++)

if(a[j]

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

printf(“%4d”,a[i]); }

冒泡排序另外一种表达形式:前面程序是每轮排序找最小值定位在最前面,换一种思路,每一轮排序找最大值定位在最后面。每轮排序将相邻的元素两两比较,如果前面元素较大,则交换到后面。

程序清单:main()

{int i,j,a[10],t;

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

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

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

for(j=0;j<9-i;j++)

if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}

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

printf(“%4d”,a[i]); }

二.选择排序(冒泡排序的改进)

在冒泡排序的基础上增加了一个变量,表示每轮排序的最小值的下标。如果每轮排序找出最小值的下标与初始值不一致时,则应交换该两个下标对应的元素,选择排序每轮排序最多交换了一次数据,大大减少了数据交换的次数。

程序清单:main()

{ int i,j,k,t;

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

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

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

{ k=i;

for(j=i+1;j<10;j++)

if(a[j]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值