思想:每次相邻两个数比较,若升序,则将大的数放到后面,一次循环过后,就会将最大的数放在最后.
例如:9 3 2 5 8 4 7 6是输入的待排序的数列,经过第一次排序,将最大的9放在最后,第二次排序,将剩下的2 3 5 4 7 6 8进行冒泡,将当前最大的8放在倒数第二的位置,以此类推.
#include<stdio.h>
int main()
{
int i,j,t,num;
printf("请输入排序个数:");
scanf("%d",&num); //接收需要排序的个数
int a[num]; //将排序个数赋值给数组大小(但是这样赋值会有问题数组下标从0开始)
printf("输入整数:\n");
for(i=0;i<num;i++)
scanf("%d",&a[i]);
for(i=0;i<num-1;i++) //变量i仅代表比较的趟数(n-1)趟
for(j=0;j<num-1-i;j++)
if(a[j]>a[j+1]) //相邻两个数相互比较(想逆序输出修改if(a[j]<a[j+1])即可 )
{
t=a[j];
a[j]=a[j+1];//数值借助t变量交换值
a[j+1]=t;
}
for(i=0;i<num;i++)
printf("%5d",a[i]);//数组输出和输入一样操作
printf("\n");
return 0;
}
运行结果: