C语言 冒泡排序
一、了解冒泡排序的概念
冒泡排序重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
由来这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
二、上代码理解
将9,8,7,6,5,4,3,2,1,0进行升序排序。
1.先进行一趟冒泡排序
a将9和8先交换。
b将9和7交换。
c将9和6交换。
……
最后9被交换到最后一位。
2.对所有数字进行冒泡排序
一趟冒泡排序搞定一个元素,9趟冒泡排序过去搞定了9个元素。因为是交换的效果,当搞定9个元素后剩下的一个已经在我们所需要的位置了。
所以10个数字只需进行9趟冒泡排序。
代码
代码里有相对应的注释。
#include<stdio.h>
#include<string.h>
void bubble_sort(int arr[],int sz)
{
int i=0;
//确定趟数
for(i=0;i<sz-1;i++)
{
int j=0;
//一趟冒泡排序的过程
for(j=0;j<=sz-1-i;j++)
{
if(arr[j]>arr[j+1])
{
//交换
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp; //确定下标就能找到所对应的元素
}
}
}
}
void print_arr(int arr[],int sz) //自定义打印函数
{
int i=0;
for(i=0;i<sz;i++)
{
printf("%d",arr[i]);
}
printf("\n");
}
int main()
{
int arr[10] = {9,8,7,6,5,4,3,2,1,0};
//排序位升序--冒泡排序
//计算数组元素的个数
int sz = sizeof(arr)/sizeof(arr[0]);
print_arr(arr,sz); //排序前进行打印
bubble_sort(arr,sz);
print_arr(arr,sz); //排序后进行打印
return 0;
}
注意:元素个数要在主函数里进行计算,因为数组名传递的数组首元素的地址。
我的个人博客 http://junswl.gitee.io/
对你有帮助的话,点个小小的赞吧!