https://blog.csdn.net/lu_1079776757/article/details/80459370
冒泡排序:从小到大排序(小的往前排,大的往后排)
方法一:
void BubbleSort(int a[], int len) { int i, j, temp; for (j = 0; j < len - 1; j++) { for (i = 0; i < len - 1 - j; i++) if (a[i] > a[i + 1]) { temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp; } } }
这个代码很简单,使用双循环的方式进行排序。外部的循环控制所有回合,内部循环代表每一轮的冒泡处理,先进行元素比较,再进行元素交换。那么这个代码该怎么进行优化呢??当排序伏安法分别执行到第六、第七、第八轮的时候,数列的状态其实已经变为有序的了。
在这种情况下,我们就不必要对这几次在重新进行排序,这样就会减少执行的次数,因此,我们可以进行一个优化,就是设置一个flags,如果已经排序了那么设置为0;如果不是有序的,那么设置为1。现在我们来看看优化后的代码。
void BubbleSort(int a[], int len) { int i, j, temp; int flags = 0; for (j = 0; j < len - 1; j++) { for (i = 0; i < len - 1 - j; i++) { if (a[i] > a[i + 1]) { temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp; flags = 1;//不是有序的,flags设置为1; } } if (flags == 0) return; } }