描述
算法步骤分析:
-
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
-
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
-
针对所有的元素重复以上的步骤,除了最后一个。
举例分析:
有一组无序数:3,2,5,8,4,7,6;用冒泡排序法对他们进行排序。
第一次排序后为:2,3,4,5,8,6,7 n-1~1
第二次排序后为:2,3,4,5,6,8,7 n-1~2
第三次排序后为:2,3,4,5,6,7,8 n-1~3
时间复杂度为O(n^2)
稳定性:稳定
代码实现如下:
#include<stdio.h>
#include<stdlib.h>
void Bubblesort(int a[],int n)
{
int i,j,teg;
for(i=0;i<n-1;i++) //循环次数
{
teg=0;
for(j=n-1;j>0;j--) //指针从最后开始跑
{
if(a[j]<a[j-1]) //与前一项进行比较 排序
{
int x;
x=a[j];
a[j]=a[j-1];
a[j-1]=x;
teg=1;
}
}
if(!teg) break; //未执行上一条if语句进行排序 teg=0 取非 条件为真 跳出循环
}
}
int main(void)
{
int a[7]={3,2,5,8,4,7,6};
Bubblesort(a,7);
printf("冒泡排序后为:");
for(int i=0;i<7;i++)
printf("%3d",a[i]);
}