冒泡排序的优化
#include<stdio.h>
void bubble_sort(int array[],int len)
{
int i,j,count1,count2 = 1;
int flag1; //flag1标志位,每跑完一趟就判断一次原数组现在是否有序,如果有序就break;
int flag2; //flag2记录位,记录下最后一次交换的下标j;
int k = len - 1;//控制内循环第一次的初始判断条件
for(i=0;i<len-1;i++)
{ flag1 = 1; //默认标志位为1;
for(j=0;j<k;j++)
{
//交换
if(array[j]>array[j+1])
{
array[j] = array[j] + array[j+1];
array[j+1] = array[j] - array[j+1];
array[j] = array[j] - array[j+1];
flag1 = 0;
flag2 = j;//记录最后一次的j值
}
printf("第%d次: ",count2++);
printf(" %d<-->%d ",array[j],array[j+1]);
for(count1 = 0;count1 < len;count1++)
printf(" %d",array[count1]);
printf("\n");
}
if(flag1 == 1)//判断标志位:如果这趟走完,没有发生交换,则原数组有序,跳出循环;
break;
k = flag2; //将最后一次交换的位置给k,减少比较的次数;
}
}
int main()
{
int count=10,a[10]={9,1,0,2,3,4,5,6,7,8};
bubble_sort(a,count);
}
结果: