实例要求:
1. 要求利用C语言的库函数 int rand(void)
返回一个范围在 2 到200 之间的10个整数值。
2. 利用冒泡排序以降序的方式把这10个整数值进行排序,并输出排序前的10个整数和排序后的10个整数。
代码如下:
//冒泡排序
#include<stdio.h>
#include<stdlib.h>
int main(int argc,const char *argv[])
{
int a[10]={0};
int i = 0;
for(i = 0;i < 10; i++){
//输入2~200的随机数
a[i] = rand()%200+2;
}
printf("冒泡排序前:");
for(i = 0;i < 10;i++){
//第一次遍历
printf("%d ",a[i]);
}
int j = 0;
int temp = 0;
//sizeof计算的是占用的内存空间的大小只和定义时有关
int len = sizeof(a)/sizeof(a[0]);
//外循环
//
for(j = 0;j< len-1;j++){
//内循环
//
for(i = 0;i < len-1-j;i++){
if(a[i] < a[i+1]){
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
}
printf("\n");
printf("冒泡排序后:");
for(i = 0;i < 10;i++){
//第二次遍历
printf("%d ",a[i]);
}
return 0;
}
运行结果:
算法解析:
1. 正常情况下:应该比较9趟,外层循环控制排序的趟数,j<len-1;
表示最后一趟只有一个数据,所以就不需要比较了。
2. 内层循环控制一趟排序,i<len-1-j;
此代码处的-1
是为了防止越界,而-j
表示每趟排序可以少比较一个数据。*