初学C语言时总会对冒泡排序法的代码感到很迷茫,那么有没有更容易理解的方式去拿下“冒泡排序”呢?
文章目录
- 冒泡排序法简介
- 一、主要特点
- 二、使用步骤
- 1.教材上的代码
- 2. 改进后的代码
- 总结
冒泡排序简介
每趟不断将记录两两比较,并按“前小后大” 规则交换
提示:以下仅为本人意见,如有不足欢迎留言指正
一、主要特点
巧妙避开数组第一位的取值,从而让冒泡排序的代码更便于理解
二、使用步骤
1.教材上的代码
代码如下(C语言程序设计):
#include<stdio.h>
int main()
{
int a[50]; //开辟一个新空间
int i, j, t, n; //i,j分别为循环计数器,n为要放入多少数字,t为交换中间量
printf("How many numbers you will put? \n");
scanf_s("%d", &n);
printf("Input %d numbers: \n",n);
for (i = 0; i < n; i++)
scanf_s("%d", &a[i]);
for (j = 1; j <= n - 1; j++) //j表示第几轮比较
for (i = 0; i <= n - j - 1; i++) //注意这里的n-j-1
if (a[i] > a[i + 1])
{
t = a[i]; a[i] = a[i + 1]; a[i + 1] = t;
}
for (i = 0; i < n; i++)
printf("%4d ", a[i]);
return 0;
}
注意上边的n-j-1的地方
2.改进后的代码
代码如下(个人意见):
#include<stdio.h>
int main()
{
int a[50]; //开辟一个新空间
int i, j, t, n; //i,j分别为循环计数器,n为要放入多少数字,t为交换中间量
printf("How many numbers you will put? \n");
scanf_s("%d", &n);
printf("Input %d numbers: \n",n);
for (i = 1; i <= n; i++) //注意,从a[1]开始输入数字,且i<=n
scanf_s("%d", &a[i]);
for (j = 1; j <= n - 1; j++) //总要进行n-1轮比较
for (i = 1; i <= n - j ; i++) //注意这里的n-j
if (a[i] > a[i + 1])
{
t = a[i]; a[i] = a[i + 1]; a[i + 1] = t;
}
for (i = 1; i <= n; i++) //输出的时候也从a[1]的地方开始
printf("%4d ", a[i]);
return 0;
}
怎么样,n-j是不是比n-j-1容易想的多?当然,如果熟练的话还是建议使用第一种方式,毕竟是我们运用数组的常用方式,便于他人阅读。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了C语言冒泡排序法的使用,其中涉及到了循环语句等内容,如有不懂之处,欢迎留言交流。