1.案例
- 随机输入一组数字,然后按照从小到大的顺序排列该组数字。 分析:排序是算法中最常见的,本次使用冒泡排序算法实现。具体实现代码如下:
#include <stdio.h>
#define N 3
int main()
{
int nums[N]; //定义一个数组
int i, j; //循环变量
int temp; //用来交换的临时变量
printf("请输入%d个数:",N);
for(i = 0;i < N;i++)
{
scanf("%d",&nums[i]);
}
//外层循环控制轮数
for(i = 0; i < N - 1; i++)
{
//内层循环控制每轮的比较次数
for(j = 0; j < N - i - 1; j++)
{
//如果当前值大于后面一个值,就交换
if(nums[j] > nums[j + 1])
{
temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
printf("\n排序后的结果是:");
for(i = 0; i < N; i++)
{
printf("%d\t", nums[i]);
}
return 0;
}
- 实现效果图如下:
2.思考
核心代码:
//外层循环控制轮数
for(i = 0; i < N - 1; i++)
{
//内层循环控制每轮的比较次数
for(j = 0; j < N - i - 1; j++)
{
//如果当前值大于后面一个值,就交换
if(nums[j] > nums[j + 1])
{
temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
- 冒泡排序的灵魂语句:nums[j] > nums[j + 1];比较相邻的两个数,如果当前者比后者大,则进行交换。每一轮排序结束,选出一个未排序中最大的数放到数组后面,如此循环。这是从小到大的升序排序,假如想按照从大到小降序排序,只需要把上面那段语句改成:nums[j] < nums[j + 1]即可。
- 还有一个常用算法就是交换:
- temp = nums[j];
- nums[j] = nums[j + 1];
- nums[j + 1] = temp;
- 交换两个变量里面的值需要引入一个临时变量,就好比要交换两杯水,需要拿来一个空杯子,具体做法和倒水的例子一模一样,大家可以用同样的思考方式去理解。
- 以上就是简单的冒泡排序法,大家可以根据该例子举一反三,谢谢!