冒泡排序的思想:
假设有一个数组: int a[5] = {12,6,78,3,9};
假设从大到小排序:不知道谁是最大值谁是最小值,从数组的第一个元素开始,相邻的元素进行比较
第一次先找到所有数据中最小值放到数组的最后面:12 和 6比较 如果12小于6,交换位置
6 和 78比较,6 < 78,交换位置 12 78 6 3 9
6 和 3比较,6 > 3,不需要交换 12 78 6 3 9
3 和9 比较,3 < 9,交换位置 12 78 6 9 3
第二次找到剩下的4个数据(12 78 6 9)中最小值。
1、12和78比较 12<78 交换数据 78 12 6 9
2、12和6比较 12 > 6 不交换数据 78 12 6 9
3、6和9比较 6 < 9 交换数据 78 12 9 6 找到最小值6
没必要做这一步4、6和3比较 6 > 3 不需要交换
第三次比较找到78 12 9 中的最小值
冒泡排序需要使用两层循环:内层循环控制了每找一个最小值,比较的次数
外层循环控制需要找几个最小值。
#include<stdio.h>
int main(int argc, const char *argv[])
{
int a[5];
int i,j;
int temp;
for(i = 0;i < 5;i ++)
{
scanf("%d",&a[i]);
}
for(i = 0;i < 4;i ++)
{
for(j = 0;j < 4 - i;j ++)
{
if(a[j] < a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for(i = 0;i < 5;i ++)
{
printf("%d\t",a[i]);
}
printf("\n");
return 0;
}