#include<stdio.h>
void main()
{
int a[10]; //定义一个数组既它的元素为10
int i,j,temp; //定义3个变量
printf("输入10个整数:\n\a");
for(i=0;i<10;i++)
scanf("%d",&a[i]);//依次输入10个整数
for(i=0;i<9;i++) //进行9轮排序
{
for(j=0;j<9-i;j++) //每轮进行9-i次交换
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1]; //大的沉底,小的上浮
a[j+1]=temp;
}
}
printf("排序结果:");
for(i=0;i<10;i++) //依次输出排序结果
printf("%d\t ",a[i]);
}
随便输入几个数,然后按从小到大或者是从大到小的顺序排列
输入五个数,按从小到大的顺序排列
//从小到大排列
#include<stdio.h>
void main()
{
int i,j,a[5],temp;
for(i=0;i<5;i++)
{
printf("please input a number a[%d]=",i);
scanf("%d",&a);
}
for(i=4;i>0;i--)
{
for(j=4;j>4-i;j--)
{
if(a[j-1]>a[j])
{
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
}
}
for(i=0;i<5;i++)
printf("%d\t",a);
}
从大到下就是将语句"if(a[j-1]>a[j])"改为"if(a[j-i]<a[j])"即可
程序分析
冒泡法顾名思义就是将一个数从下面浮上来,假设有5个数,21 56 87 6 9,
将第五个元素的值与第四个元素的值相比,如果第五个元素的值小于第四个元素的值,则交换着两个元素的值。
接下来,将第四个元素的值与第三个元素的值进行比较,按照类似的方式,如果发现下面元素的值小于上面元素的值,则交换着两个值。
将第三个元素的值与第二个元素的值比较,做同样的工作。
在这一轮比较结束时,最小值将到达最上面,可以说最小值已经浮到最上面
第二轮,从最底部的元素开始比较,直到第二个元素,因为第一个已经是最小,不需要再进行比较。
其实,就是一个for循环,最外面的循环控制循环的次数,需要有n-1次循环
固定为for(i=n-1;i>0;i--)
里面的循环从最大值开始,次数为n-1-i,
固定为for(j=n-1;j>n-1-i;j--)
循环体就是
if(a[j-1]>a[j])
{temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
直接套用即可
字符串的比较也是一样,这里不再罗嗦
例:将dcaeb 按字母顺序排列
#include <stdio.h>
#include <string.h>
#define N 6
void string_cmp(char *p)
{
int i,j;
char o;
for(i=0;i <N-1;i++)
{
for(j=i+1;j <N-1;j++)
{
//if(*(p+i)>*(p+j))
if(strcmp((p+i),(p+j))>0)
{
o=*(p+i);
*(p+i)=*(p+j);
*(p+j)=o;
}
}
}
}
main()
{
int i;
char a[N]= "dcaeb ";
string_cmp(a);
for(i=0;i <(N-1);i++)
printf( "%c ",a);
printf( "\n ");
getch();
}