一:基本思想
1.在要排序的一组数组中两类相互比较,按照题目所给的条件从大到小排或者从小到大排。
2.(假定现在从小向大排序),利用循环多次两两比较,大的往右排。
二:基本原理
1.确定冒泡到底有多少轮?举个例子,现在有三张卡牌分别标号不同的数字1,2,3,将其中的两张卡牌拍好,第三张自然也有了自己的位置,即当一个数组中有n个数字的时候需要n-1趟冒泡。同时每一趟冒泡也只能将一个数字归位。
2.每一趟冒泡该如何操作?而每一趟冒泡排序都从第一位开始进行相邻两个数字的比较比较完成以后大的往后挪。
三:动图表示
四:代码实现
1.从左向右交换:
//冒泡排序-从左到右交换
void Bubblesort(int L[],int n)
{
int i,j; //记录内外循环
int flag,temp;//flag用来判断排序是否完成 temp用于完成交换
for(i=n-1;i>=0;i--)
{
flag=0;
for(j=0;j<i;j++)
{
if(L[j]>L[j+1])
{
temp=L[j];
L[j]=L[j+1];
L[j+1]=temp;
flat=1;
}
if(flag==0) return;//没有发生交换 说明序列已经有序
}
}
}
2.从右向左:
//冒泡排序-从右到左交换
void Bubblesort(int L[],int n)
{
int i,j;
for(i=0;i<num-1;i++)//两层循环第一次都应有n-1次比较
{
for(j=0;j<n-1-i;j++)
{
if(a[j]<a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}