冒泡排序法是一种排序算法,如将int[ ] numbers={ 1,5,3,6,4,9,8,0,7,2}数组内的元素按升序排序
算法原理:将前后每两个数进行比较,较大的数往后排,一轮下来最大的数就排到最后去了。然后再进行第二轮比较,第二大的数也排到倒数第二了,以此类推:
第一轮比较:
第一次比较:1,5,3,6,4,9,8,0,7,2第一个数不大于第二个数,不调换位置
第二次比较:1,3,5,6,4,9,8,0,7,2第二个数大于第三个数,调换位置
第三次比较:1,3,5,6,4,9,8,0,7,2 第三个数不大于第四个数,不调换位置
第四次比较:1,3,5,4,6,9,8,0,7,2 第四个数大于第五个数,调换位置
。。。。。以此类推
第九次比较:1,3,5,4,6,8,0,7,2,9第九个数大于第十个数,调换位置
上面就进行完了第一轮比较将最大的一个数字排到了最后面。比较次数9次
第二轮比较:
跟第一轮比较一样,但我们可以发现,最后一个数字我们不需要比较,因为那是最大的数
比较次数8次
第三轮比较:
比较次数7次
。
。
。
。
第九轮比较:
比较次数1次
算法原理:将前后每两个数进行比较,较大的数往后排,一轮下来最大的数就排到最后去了。然后再进行第二轮比较,第二大的数也排到倒数第二了,以此类推:
第一轮比较:
第一次比较:1,5,3,6,4,9,8,0,7,2第一个数不大于第二个数,不调换位置
第二次比较:1,3,5,6,4,9,8,0,7,2第二个数大于第三个数,调换位置
第三次比较:1,3,5,6,4,9,8,0,7,2 第三个数不大于第四个数,不调换位置
第四次比较:1,3,5,4,6,9,8,0,7,2 第四个数大于第五个数,调换位置
。。。。。以此类推
第九次比较:1,3,5,4,6,8,0,7,2,9第九个数大于第十个数,调换位置
上面就进行完了第一轮比较将最大的一个数字排到了最后面。比较次数9次
第二轮比较:
跟第一轮比较一样,但我们可以发现,最后一个数字我们不需要比较,因为那是最大的数
比较次数8次
第三轮比较:
比较次数7次
。
。
。
。
第九轮比较:
比较次数1次
从上面的分析我们可以看出我们排10个数需要比较九轮,每一轮比较由9次递减到1次
C语言程序代码:
1.
#include <stdio.h>
#define SIZE 8
void
bubble_sort(
int
a[],
int
n);
void
bubble_sort(
int
a[],
int
n)
{
int
i, j, temp;
for
(j = 0; j < n - 1; j++)
for
(i = 0; i < n - 1 - j; i++)
{
if
(a[i] > a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
int
main()
{
int
number[SIZE] = {95, 45, 15, 78, 84, 51, 24, 12};
int
i;
bubble_sort(number, SIZE);
for
(i = 0; i < SIZE; i++)
{
printf
(
"%d"
, number[i]);
}
printf
(
"\n"
);
}
2
#include <stdio.h>
void main()
{
int i=0;
int c,j,length;
char a[10];
char temp;
do
{ scanf("%d",&a[i]);
i++;
}while((c=getchar()) != ' ');
length=i;
printf("the number you put is:%d\n",length);
for(i=0;i<length;i++)
printf("%d ",a[i]);
for(i=1;i<length;i++)
for(j=0;j<length-i;j++)
{
if(a[j]>a[j+1])
{ temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
for(i=0;i<length;i++)
printf("%d ",a[i]);
}