tips:从左到右,依次比较,前数大于后数,两数交换,否则不交换。(从小到大排列)
定义一个有5个元素的整型数组:
int a[5] ={66, 33, 52, 24, 88};
5个元素需要比较四次:具体如下
第一趟:66 33 52 24 88
第一次:a[0] > a[1] 交换 得到: 33 66 52 24 88
第二次:a[1] > a[2] 交换 得到:33 52 66 24 88
第三次:a[2] > a[3] 交换 得到:33 52 24 66 88
第四次:a[3] <a[4] 不交换 得到:33 52 24 66 88
第一趟已经将最大数移到了最终的位置。
第二趟:33 52 24 66 88
第一次:a[0] < a[1] 不交换 得到 33 52 24 66 88
第二次:a[1] > a[2] 交换 得到 33 24 52 66 88
第三次:a[2] < a[3] 不交换 得到 33 24 52 66 88
第二趟已经将最大值和次大值移到了相应的位置。因为最大值已经在最右边了,所以少比较一次。
第三趟:33 24 52 66 88
第一次:a[0] > a[1] 交换 得到 24 33 52 66 88
第二次:a[1] < a[2] 交换 得到 24 33 52 66 88
只剩最前面的两个数还没有确定位置,所以接下来只需比较一次。
第四趟:24 33 52 66 88
第一次:a[0] < a[1] 不交换 得到 24 33 52 66 88
排序完成。
当然,每一趟比较四次不会出现问题,但那样会有时间浪费。
实现代码如下:
#include <stdio.h>
#define N 5
//冒泡排序
int main()
{
int i;
int j;
int temp = 0;
int a[N] ;
printf("请输入%d个整数:\n",N);
for(i=0; i<N; i++){
scanf("%d",&a[i]);
}
for(i = 0; i < N -1; i++){
for(j = 0; j< N-1-i;j++){
if(a[j] > a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for(i = 0; i<N; i++)
printf("%d ",a[i]);
return 0;
}
输出展示:
下次再见!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!