# include <iostream>
void bubbleSort(int* array, int n)
{
int i, j, k, temp;
int count = 0;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
count++;
if (array[j] > array[j + 1])
{
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
for (k = 0; k < n; k++)
{
std::cout << array[k] << " ";
}
std::cout << "\n";
}
std::cout << "无优化 count = " << count << "\n\n";
}
void bubbleSort1(int* array, int n)
{
int i, j, k, temp, flag;
int count = 0;
for (i = 0; i < n - 1; i++)
{
flag = 0;
for (j = 0; j < n - 1 - i; j++)
{
count++;
if (array[j] > array[j + 1])
{
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = 1; // 优化外层循环,只要未发生交换说明排序完成,后面跳出循环;
}
}
if (flag == 0)
{
break;
}
for (k = 0; k < n; k++)
{
std::cout << array[k] << " ";
}
std::cout << "\n";
}
std::cout << "外层循环优化 count = " << count << "\n\n";
}
void bubbleSort2(int* array, int n)
{
int i, j, k, temp, flag;
int count = 0;
int local = 0;
int m = n - 1;
for (i = 0; i < n - 1; i++)
{
flag = 0;
for (j = 0; j < m; j++)
{
count++;
if (array[j] > array[j + 1])
{
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = 1; // 优化外层循环,只要未发生交换说明排序完成,后面跳出循环;
local = j; // 优化内层循环,把交换过的最后一个位置 j 赋值给 local,减少后面的无效比较;
}
}
m = local;
if (flag == 0)
{
break;
}
for (k = 0; k < n; k++)
{
std::cout << array[k] << " ";
}
std::cout << "\n";
}
std::cout << "内层循环优化 count = " << count << "\n\n";
}
int main()
{
const int n = 10;
int array[n] = { 6,5,4,3,2,1,0,7,8,9 };
int array1[n] = { 6,5,4,3,2,1,0,7,8,9 };
int array2[n] = { 6,5,4,3,2,1,0,7,8,9 };
bubbleSort(array, n);
bubbleSort1(array1, n);
bubbleSort2(array2, n);
return 0;
}