基本冒泡排序思路:一趟冒泡排序对相邻元素进行比较,无序则进行交换。
改进思路:对无序区域边界进行标记,若有序区域范围较大,进行下一趟冒泡排序时可以提前结束。
//冒泡排序
template<typename T>
void BubbleSort1(T arr[], int n)
{
for (int i = 0; i < n; i++)
{
//一趟冒泡排序
for (int j = 0; j < n-1 - i; j++)
{
if (arr[j] > arr[j + 1])
std::swap(arr[j], arr[j + 1]);
}
}
}
//冒泡排序改进
template<typename T>
void BubbleSort2(T arr[], int n)
{
//无序区域[0,bound),bound是无序区末尾的下一个元素
int bound = n;
while (bound)
{
int pos = bound;
bound = 0;
for (int j = 0; j < pos -1 ; j++)
{
if (arr[j] > arr[j + 1])
{
std::swap(arr[j], arr[j + 1]);
bound = j + 1;
}
}
}
}