冒泡排序的优化
2016-08-14 18:16
148 查看
冒泡排序的优化
结果:
#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); }
结果: