冒泡排序
-
从左到右两两对比,大的往后移,每轮完成之后,数组中最大的数都会沉到数组末尾。
-
优缺点:稳定、不需要辅助和空间,但是效率太低
-
复杂度:时间换空间,不需要额外的辅助
例: -1 8 3 17 9 5
第一次循环:-1 3 8 9 5 17
第二次循环:-1 3 8 5 9 17
第三次循环:-1 3 5 8 9 17
第四次
第五次
#include<stdio.h>
int main()
{
int a[6]={-1,8,3,17,9,5};
for(int i=0;i<6-1;i++)//趟数,每循环一次就减少一次
{
for(int j=0;j<6--1-i;j++)//次数,趟数多,次数越少
{
if(a[j]>a[j+1])
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<6;i++)
{
printf("%d\t",a[i]);
}
return 0;
}
如果都没有交换(例如第四次第五次)则进行以下操作
#include<stdio.h>
#include<stdbool.h> //布尔类型
int main()
{
int a[6]={-1 8 3 17 9 5};
for(int i=0;i<6-1;i++)
{
bool swapped=false; //假设没有交换
for(int j=0;j<6--1-i;j++)
{
if(a[j]>a[j+1])
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
swapped=true;
}
}
if(!swapped) //数组有序
{
break;
}
}
for(int i=0;i<6;i++)
{
printf("%d\t",a[i]);
}
return 0;
}