前言
今天学习一下C语言的冒泡排序,为何是“冒泡”排序呢?就拿我们平时的碳酸饮料举个例子,当我们摇晃我们的碳酸饮料时,会从底部产生小气泡,然后不断的向上升,气泡也变得越来越大,就可以知道小气泡在下,大气泡在上。就类似我们把第一组杂乱无章的数字排成一组从小到大的数字,就称为冒泡排序。可用于我们对学号,成绩,身高等的按序排列。
提示:以下是本篇文章正文内容,下面案例可供参考
一、如何程序实现?
我们首先了解了冒泡排序是什么,就下来我们要知道我们如何在我们的程序上实现,让电脑读懂;排序:就是要两两进行比较大小后在排序,所以我们此时就要想到for循环语句
,如果第n个数字比第n+1个数字大,我们是不是要对其进行交换?此时我们的大概流程都已经梳理的差不多了,我们就可以先把大概写下来:
#include<stdio.h>
int main()
{
int arr[]={4,6,71,61,53,11,3,25,1,21};//一个乱序的数组
int sz=sizeof(arr)/sizeof(arr[0]);//数组个数
int i,j;
//趟数
for (i = 0; i < sz - 1; i++)
{
//一趟冒泡排序的细节
int j = 0;
for (j = 0; j < sz - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
//较大的数要进行交换,这时给出一个“空杯子”的变量temp
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return 0;
}
写到这里我们大概知道整个的冒泡排序该如何实现,接下来我们将其在优化改善一下,如何避免重复的比较和让整个代码看起来更赏心悦目呢,代码写完后我们在将其输出。
二、代码实现
我们可以自己定义一个冒泡排序的函数进行使用,这样使我们和读者能够更好的阅读,如果我们要减少趟数我们只要给出一个假设,假设这个数已经是有序的了,将不会进行判断,此时我们给出我们定义的flag=1;假设有序,接下来看一下代码的实现:
#include<stdio.h>
void bubble_sort(int arr[], int sz)
{
int i = 0;
//趟数
for (i = 0; i < sz - 1; i++)
{
int flag = 1;//假设已经有序
int j = 0;
for (j = 0; j < sz - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = 0;//无序则为0
}
}
if (flag == 1)
{
break;
}
}
}
int main()
{
int arr[] = { 4,6,71,61,53,11,3,25,1,21 };
int sz = sizeof(arr) / sizeof(arr[0]);
//冒泡排序函数
bubble_sort(arr, sz);
//遍历排序后的数组
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
程序运行结果:
总结
这个自己在学习时的思路,仅供参考,需要改进的地方希望大家多多建议!共同进步。