我们在原来的冒泡排序算法中加入一个flag标记,用于标记此趟排序数据是否发生交换,如果flag发生变化,则说明数据发生变化,如果没有变,则说明数据没有发生交换。
这个改进可以提高冒泡排序算法的时间效率,当然只是小幅提升。
代码如下:
void BubbleSort(int* arr, int left, int right)
{
int n = right - left; //表示趟数
bool flag = false;//用于标记此趟排序是否有交换,如有则说明数据整体未必有序,如没有则说明数据已经有序,直接退出
for (int i = left; i < n; i++)
{
for (int j = left; j< n-i-1; j++)
{
if (arr[j] > arr[j + 1])
{
Swap(&arr[j], &arr[j + 1]);//这里Swap函数用于交换两个数
flag = true;
}
}
if (!flag)
{
break;
}
else {
flag = false;
}
}
}