文章目录
介绍
交换法排序是将每一位数与其后的所有数一一比较,如果发现符合条件的数据则交换数据。
思路
具体实现如表格,从表格中可以发现,在第一轮交换排序过程中,先将10和7比较,进行调换(按从小到大排);然后进行7和16的比较,这次则保持;然后进行7和5的比较,进行调换; 然后进行5和3的比较,进行调换,第一轮的交换就完成了,然后将第一轮的结果进行第二轮。
第一轮 | 10 | 7 | 16 | 5 | 3 |
---|---|---|---|---|---|
初始数组资源 | 【10 | 7】 | 16 | 5 | 3 |
第一次排序后 | 【7 】 | 10 | 【16 】 | 5 | 3 |
第二次排序后 | 【7】 | 10 | 16 | 【5】 | 3 |
第三次排序后 | 【5 】 | 10 | 16 | 7 | 【3】 |
第四次排序后 | 3 | 10 | 16 | 7 | 5 |
然后将第一轮交换的结果进行第二轮交换排序。同理,先将10和16比较,这次则保持;然后进行10和7的比较,进行调换;然后进行7和5的比较,进行调换;第二轮的交换就完成了,然后进行下一轮交换。
第二轮 | 3 | 【10 | 16】 | 7 | 5 |
---|---|---|---|---|---|
第一次排序后 | 3 | 【10】 | 16 | 【7 】 | 5 |
第二次排序后 | 3 | 【7】 | 16 | 10 | 【 5 】 |
第三次排序后 | 3 | 5 | 16 | 10 | 7 |
然后将第二轮交换的结果进行第三轮交换排序。同理,先将16和10比较,进行调换;然后进行10和7的比较,进行调换;然后进行下一轮交换。
第三轮 | 3 | 5 | 【 16 | 10 】 | 7 |
---|---|---|---|---|---|
第一次排序后 | 3 | 5 | 【10】 | 16 | 【7】 |
第二次排序后 | 3 | 5 | 7 | 16 | 10 |
然后将第三轮交换的结果进行第四轮交换排序。同理,先将16和10比较,进行调换;最后就完成了交换法排序(从小到大)。
第四轮 | 3 | 5 | 7 | 【 16 | 10】 |
---|---|---|---|---|---|
第一次排序后 | 3 | 5 | 7 | 10 | 16 |
代码实现
这里的代码看似和冒泡法的代码结构一样,但是两者有细微差距,从思路的分析也可以看出来,这里和冒泡法有着本质的不同,
#include <stdio.h>
int main(){
int i,j,a[10],temp;
printf("请先为数组赋值:\n");//先用for循环输入数组
for(i=0;i<10;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
for(i=0;i<9;i++) //进行循环,完成需要排序的轮数
{
for(j=i+1;j<10;j++)
{
if(a[i]>a[j]) //选择排序方向,改变符号可以改变方向
{
temp=a[i]; //交换两个位置的值
a[i]=a[j]; //交换两个位置的值
a[j]=temp; //交换两个位置的值
}
}
}
for(i=0;i<10;i++) //输出数组
{
printf("%d\t",a[i]);
}
return 0;
}
结果
请先为数组赋值:
a[0]=1
a[1]=2
a[2]=3
a[3]=4
a[4]=5
a[5]=6
a[6]=7
a[7]=8
a[8]=9
a[9]=10
1 2 3 4 5 6 7 8 9 10
标签:10,语言,16,调换,交换,排序,交换法,进行
From: https://blog.csdn.net/weixin_69737466/article/details/144458771