admin管理员组文章数量:1794759
【C语言】冒泡排序保姆级教学
C语言冒泡排序保姆级教学
动态图解:
拿排升序举例子 第一步: 将想要排序的数组中数值最大的那个数排到该数组的最后 具体实现如下图:
第一步代码实现
代码语言:javascript代码运行次数:0运行复制for (int i = 1; i < n ; i++)//n为数组大小此处为4
{
if (a[i - 1] > a[i])//注意越界,若排降序将大于改为小于即可
{
int tmp = a[i - 1];
a[i - 1] = a[i];
a[i] = tmp;
}
}
第二步(关键) 由于通过第一步我们已经将最大的数排在了数组最后 因此只需要将数组中第二大的数排到数组的倒数第二个位置 所以这里我们就采用双重循环来控制要排序的区间 这里就是我们要排序的区间从原来的a[0]到a[3]缩小到a[0]到a[2], 即每次将排序区间中最大的数排到该区间最后后,将该排序区间缩小1; 代码如下:
代码语言:javascript代码运行次数:0运行复制for (int j = 0; j < n - 1; j++)
//此处条件为j < n - 1 可以根据第二个for循环得到,当n为1时依旧要进入第二个for
//循环对a[0]与a[1]比较,所以第二个for循环条件n - j 最小应该为2,那么j最大就应该为 n - 2;
{
for (int i = 1; i < n - j; i++)//注意此处条件变为i < n - j,来达到每次排序完后区间缩小1的目的
{
if (a[i - 1] > a[i])//注意越界
{
int tmp = a[i - 1];
a[i - 1] = a[i];
a[i] = tmp;
}
}
冒泡排序的优化
这个双重循环已经可以解决排序问题了,但是可以对它进行优化,使得我们的代码更加健壮(运行时间更短),优化代码如下:
代码语言:javascript代码运行次数:0运行复制void BubbleSort(int* a, int n)//BubbleSort中文为冒泡排序的意思
{
for (int j = 0; j < n - 1; j++)
{
int exchange = 0;//在此定义一个变量来判断当前数组是否已经排好序了
for (int i = 1; i < n - j; i++)
{
if (a[i - 1] > a[i])//注意越界
{
int tmp = a[i - 1];
a[i - 1] = a[i];
a[i] = tmp;
exchange = 1;
}
}
//如果已经排好序就不会再进入第二个for循环,变量的值就不会为1,直接退出循环
if (exchange == 0)
{
break;
}
}
}
数组元素和大小大家可以自行修改 OK呀家人们,现在直接上全代码一观:
代码语言:javascript代码运行次数:0运行复制#include<stdio.h>
void BubbleSort(int* a, int n)
{
for (int j = 0; j < n - 1; j++)
{
int exchange = 0;
for (int i = 1; i < n - j; i++)
{
if (a[i - 1] > a[i])//注意越界
{
int tmp = a[i - 1];
a[i - 1] = a[i];
a[i] = tmp;
exchange = 1;
}
}
if (exchange == 0)
{
break;
}
}
}
int main()
{
int a[4] = { 4,2,3,1 };
BubbleSort(a, 4);
for (int i = 0; i < 4; i++)
{
printf("%d ", a[i]);
}
return 0;
}
运行结果:
如果有帮助到您,给俺个赞呗,制作不易,点赞收藏方便以后浏览。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-09-28,如有侵权请联系 cloudcommunity@tencent 删除优化int变量排序数组本文标签: C语言冒泡排序保姆级教学
版权声明:本文标题:【C语言】冒泡排序保姆级教学 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754779855a1706323.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论