冒泡排序
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;
}
}

浙公网安备 33010602011771号