C语言实现<冒泡排序>
你们好!我是飞人!此篇文章是我进入IT行业第一篇博客,若有不妥之处,欢迎指点。
此篇讲解冒泡排序的原理,以及如何用C语言去实现。希望能够给各位读者带来一定的认识。
整体思路
例子:以一个整形数组为例
int arr[10]={1,2,3,4,5,6,7,8,9,10};
我们如何进行“降序”的排序方式??
- 确定躺数
总共需要排序10个数,而当我们实际去进行安排怎么去比较大小时,总共只组合了9对数据(即10-1对):“1与2”,“1与3”,“1与4”…“1与10”,这是第一趟排序,将‘1’从最前面的位置排到最后的位置。
第一趟排序之后,此时数组里面的内容是
int arr[10]={2,3,4,5,6,7,8,9,10,1};
'1’来到了数组的最后面。
此时我们就要进行第二个数字的排序,跟第一次‘1’的排序是一样的。但是此刻我们要考虑这一趟需要多少对数据???第一趟排序之后,‘1’已经来到了他该来到的位置,此时就不需要再对他进行排序,所以第二趟需要8对(即10-1-1对)…循环往复下去。
综上所诉,当我们要去排序n个数据时,总共就需要**(n-1)**趟排序。
- 躺数确定后,我们来捋清楚这一趟排序中,如何进行每个元素的交换。
我们都知道数组的下标是从0开始的。
我们在进行比较大小交换时,最先开始的就是下标为0和下标为1 的数据进行比较,如果前者小于后者,我们就进行交换。然后再进行下一对数据进行,那就是下标为1和下标为2 的进行比较…到最后下标为8和下标为9 的数据…
这就是一趟的排序,我们知道下一趟的数据是要减去已经排好的那个数据本身,即就是下标由原来的 0至9,到 0至8,再 0至7…
整体的思路我们捋清楚了,接下来就是如何去实现代码。接着往下看。
代码实现
```c
#include <stdio.h>
int main()
{
//创建数组
int arr[10]={1,2,3,4,5,6,7,8,9,10};
//计算元素个数----整个数组的大小除去一个元素的大小,就是整个数组的大//小了,单位字节
int sz=sizeof(arr)/sizeof(arr[0]);
int i,j;//循环变量
//当然,需要注意的就是 未初始化的局部变量,他是随机值
//而全局变量未初始化,他默认是0
for(i=0;i<sz;i++) //这是躺数
{
for(j=0;j<sz-1-i;j++) //这是一趟中需要交换的数据对数
{
//sz-1-i 就是随着躺数的增加,我们这一趟中需要交换的
//数据就越来越少
if(arr[j]<arr[j+1])
{
//创建临时变量,将其中一个数据就先进行保存
int tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
//这样我们就实现了冒泡排序的实现
for(i=0;i<sz;i++)
printf("%d ",arr[i]);
//最后再打印出来
return 0;
}
## 总结
当我们去学习冒泡排序的时候,最重要的是捋清楚上面我画的那幅图(虽然不好看,哈哈哈),当捋清楚冒泡排序他根本的逻辑后,再来实现代码,就轻松很多。
我呢,才疏学浅,我能够讲解的只有这些,见谅!如果还有什么疑问,我们评论区见。
后面呢,我会发一篇关于库函数qsort的使用,敬请期待!!!