冒泡排序的思想:通过相邻两个数进行比较,第一趟冒泡排序将最小的数移到第一位,经过第n-1趟冒泡排序就可以将n个数字从小到大排序。
// 9 8 7 6 5 4 3 2 1 0 10个数需要进行9次排序 // 0 9 8 7 6 5 4 3 2 1 第一趟冒泡排序之后 // 0 1 9 8 7 6 5 4 3 2 第二趟冒泡排序之后 // 0 1 2 9 8 7 6 5 4 3 第三趟冒泡排序之后 // 0 1 2 3 9 8 7 6 5 4 第四趟冒泡排序之后 // 0 1 2 3 4 9 8 7 6 5 第五趟冒泡排序之后 // 0 1 2 3 4 5 9 8 7 6 第六趟冒泡排序之后 // 0 1 2 3 4 5 6 9 8 7 第七趟冒泡排序之后 // 0 1 2 3 4 5 6 7 9 8 第八趟冒泡排序之后 // 0 1 2 3 4 5 6 7 8 9 第九趟冒泡排序之后
这个是我写的代码的排序方式,还有的人是将最大的数移到最后一位,经过第n-1趟冒泡排序也可以将n个数字从小到大排序。总体思想是一样的,如果想要从大到小排序也是一样的思想,将最大的数移到第一位或者将最小的数移到最后一位。
for(int i = 0; i < 9; i++)
{
for(int j = 9; j > i; j--)
{
if(num[i] > num[j])
{
temp=num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
理解上述这串代码是冒泡排序的关键,开始i=0时,j的取值从1-9;依次比较
i=0;j=1~9; a[0]=9 与 a[9]=0 比较之后 a[0]=0 a[9]=9 a[0]=0 与 a[8]=1 比较之后 a[0]=0 a[8]=1 a[0]=0 与 a[7]=2 比较之后 a[0]=0 a[7]=2 a[0]=0 与 a[6]=3 比较之后 a[0]=0 a[6]=3 a[0]=0 与 a[5]=4 比较之后 a[0]=0 a[5]=4 a[0]=0 与 a[4]=5 比较之后 a[0]=0 a[4]=5 a[0]=0 与 a[3]=6 比较之后 a[0]=0 a[3]=6 a[0]=0 与 a[2]=7 比较之后 a[0]=0 a[2]=7 a[0]=0 与 a[1]=8 比较之后 a[0]=0 a[1]=8 .....依次比较改变
为了验证这个是否正确,我写了一个代码验证
验证思想:生成10个数100以内的随机数,再进行冒泡排序,最后输出结果。
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand(time(NULL));
int num[10],temp;
for(int i = 0; i < 10; i++)
{
num[i]=rand()%100; // 随机生成100以内的整数
printf("%d ",num[i]);
}
printf("\n------------------------------\n");
for(int i = 0; i < 9; i++)
{
for(int j = 9; j > i; j--)
{
if(num[i] > num[j])
{
temp=num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
for(int j = 0; j < 10; j++)
{
printf("%d ",num[j]);
}
return 0;
}
结果如下图所示:
完事大吉啦!
再接再励吧!!!!!!!
脑袋空空。
如果问题,请赐教,感谢!