【问题描述】
冒牌排序法,输入n(n<=10)个正整数,将他们从小到大排序后输出,要求使用冒泡排序算法,来使序列从小到大输出
【输入形式】
7 3 66 3 -5 22 -77 2
【输出形式】
-77 -5 2 3 3 7 22 66
注意要点(解题方法或易错区域):
1) 要学习到冒泡排序法的思维是如何的。我的理解是,不断地把在循环范围内的最大的数向右递送n次,第一次就可以将最大值递送到最右边,然后每一次的循环都是要减小递送次数,找到第二大的数,则是递送n-1次,依次向右递送,减小递送次数,定好最右边的数,不断从右往左找到数字
2)此方法需要消耗的时间较长,如果数字较多的话,需要消耗的内存就较大,循环的时间长,但是还是要多了解一些解题的方法,多些选择就可以更好的运用涌现在脑中的方法了
3)冒泡排序法肯定是要使用数组的方式的,且要使用指针的swap函数来调换递送转换的两个值的位置,还可以利用void函数直接输出
#include<stdio.h>
void bubble(int a[],int n) ;
void swap(int *px,int *py);
#define Max 10
int main()
{
int n;
int a[Max];
int i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",a[i]);
}
bubble(a,n);
for(i=0;i<n;i++)
{
printf("%d",a[i]);
}
return 0;
}
void bubble(int a[],int n)
{
int i,j;
int t;
for(i=1;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(a[j]>a[j+1])
{
swap(&a[j],&a[j+1]);
}
}
}
}
void swap(int *px,int *py)
{
int t;
t=*px;
*px=*py;
*py=t;
}