
刚开始接触算法,总是感觉很头疼;每次也不知道怎么写算法,也不懂算法的原理。我就在这里用C语言讲解简单排序算法——冒泡排序(又称气泡排序,Bubble Sort);如果你有更好的建议,或者有疑惑,可以给我留言。如果你想了解其它算法,如快排等,在大学以及工作中必须掌握的算法,那么请关注或者收藏我,我将继续更新其它算法。
冒泡排序原理:
设要排序的数据记录到一个数组中,把关键字较小的看成“较轻”的气泡,所以就应该上浮。从底部(数组下标较大的一端)开始,反复的从下向上扫描数组。进行每一遍扫描时,依次比较“相邻”的两个数据,如果“较轻”的气泡在下面,就要进行交换,把它们颠倒过来。(图片取自互联网)
具体实现过程:第一步 输入数据
你可以直接将你所需要的数据存入数组,如int a = {84,83,88,87,61};
也可以通过循环输入
for(i = 0 ; i< n ;i++)
{
scanf("%d",&a[i]);
}
来实现数据输入数组;
具体实现过程:第二步 写循环
冒泡排序是从最低部扫描(数组下标大的一端);所以内部循环应该从数组下标较大的一方开始for(j = n - 1 ; j > i ; j--)
内部循环确定以后,写外部循环;
for(i = 0; i < n ; i++)
for(j = n - 1 ; j > i ; j--) // j>i的是扫描第一遍以后,下标最小的一位数,已经变成最大的一位数
具体实现过程:第二步 写交换
if(a[j - 1] < a[j])
{
temp = a[j - 1];
a[j - 1]=a[j];
a[j]=temp;
}
C语言实现:
#include
int main()
{
int a = {84,83,88,87,61};
int i,j;
int temp;
printf("按从大到小排序!\n");
int n = 5 ;//数组最大的下标
for(i = 0; i < n ; i++)
for(j = n - 1 ; j > i ; j--)
{
if(a[j - 1] < a[j])
{
temp = a[j - 1];
a[j - 1]=a[j];
a[j]=temp;
}
}
for(i = 0 ; i < n ; i++)
{
printf("%d ",a[i]);
}
return 0;
}
运行程序,成功截图如下;
气泡排序的时间复杂度为0(n^2);
