1,题目描述:输入10个整数,使用冒泡排序法进行升序排序。
2,解法思路:(具体解释冒泡排序的具体实现过程)
1)从序列的第一个元素开始,对相邻的两个元素进行比较,如果顺序错误就交换他们的位置,使较小的元素排在前面,较大元素排在后面。
2)在对序列中所有的相邻元素都进行了一次比较之后,第一轮排序结束,此时最后一个元素已经是整个序列中最大的元素。
3)对剩下的未排序的元素执行步骤1)步骤2),知道整个序列都有序为止。
注意:若在某一轮序列中未进行交换操作,则当前序列已经是升序状态,可以结束排序。
#include <stdio.h>
int main()
{
int a[10]={0};
//计算数组中有多少个元素
int sz=sizeof(a)/sizeof(a[0]);
int i=0;
//数组输入数据
for(i=0;i<sz;i++)
{
scanf("%d",&a[i]);
}
//冒泡排序
for(i=0;i<sz-1;i++) //sz-1是因为不用与自己比较 ,所以比的数少一个
{
int j=0;
for(j=0;j<sz-1-i;j++)//sz-1-i是因为每一趟就会少一个数比较
{
if(a[j]>a[j+1])//升序排法,前一个数和后一个数比较,若前数大,则与后一个数互换位置
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
//输出
for(i=0;i<sz;i++)
{
printf("%d",a[i]);
}
return 0;
}
运行结果:
方法二:引入参数
#include <stdio.h>
int main()
{
int a[10]={0};
//计算数组中有多少个元素
int sz=sizeof(a)/sizeof(a[0]);
int i=0;
//数组输入数据
for(i=0;i<sz;i++)
{
scanf("%d",&a[i]);
}
//冒泡排序
for(i=0;i<sz-1;i++) //sz-1是因为不用与自己比较 ,所以比的数少一个
{
int j=0;
int flag=1;//引入参数flag,假设待排序的元素已经有序
for(j=0;j<sz-1-i;j++)//sz-1-i是因为每一趟就会少一个数比较
{
if(a[j]>a[j+1])//升序排法,前一个数和后一个数比较,若前数大,则与后一个数互换位置
{
flag=0;
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
if(flag==1)
break;//若在某一轮序列中未进行交换操作,则当前序列已经是升序状态,可以结束排序。
}
//数组输出
for(i=0;i<sz;i++)
{
printf("%d",a[i]);
}
return 0;
}
运行结果:
注意:以上编译环境均为Dev-c++ 。