#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
void bubbleSort_1(vector<int>& vec)
{
for (int i = 0; i < vec.size() - 1; ++i)
{
int loop_num = 0;
for (int j = 0; j <vec.size() - 1 - i; ++j)
{
++loop_num;
if (vec[j] > vec[j + 1])
{
swap(vec[j], vec[j + 1]);
}
}
std::cout << "loop_num1 = " << loop_num << std::endl;
for (auto& num : vec)
{
std::cout << num << " ";
}
std::cout << std::endl;
}
std::cout << std::endl << std::endl;
}
void bubblesort_2(vector<int>& vec)
{
int len = vec.size();
int counts = 0;
for (int i = 0; i < len - 1; ++i)
{
int loop_num = 0;
bool flag = false;
for (int j = 0; j < len - 1 - i; ++j)
{
++loop_num;
if (vec[j] > vec[j + 1])
{
++counts;
swap(vec[j], vec[j + 1]);
flag = true;
}
}
if (!flag)
{
break;
}
std::cout << "loop_num2 = " << loop_num << std::endl;
for (auto& num : vec)
{
std::cout << num << " ";
}
std::cout << std::endl;
}
std::cout << std::endl << std::endl;
}
void bubblesort_3(vector<int>& vec)
{
int len = vec.size();
int p_j = len - 1;
int p_tmp = -1;
for (int i = 0; i < len - 1; ++i)
{
bool flag = false;
int loop_num = 0;
for (int j = 0; j < p_j; ++j)
{
if (vec[j] > vec[j + 1])
{
++loop_num;
swap(vec[j], vec[j + 1]);
flag = true;
p_tmp = j;
}
}
p_j = p_tmp;
if (!flag)
{
break;
}
std::cout <<"loop_num3 = " << loop_num << std::endl;
for (auto& num : vec)
{
std::cout << num << " ";
}
std::cout << std::endl;
}
std::cout << std::endl;
}
void my_swap(vector<int>& nums, int i, int j)
{
if (i != j)
{
nums[i] ^= nums[j];
nums[j] ^= nums[i];
nums[i] ^= nums[j];
}
}
void cocktail_sort(vector<int>& nums)
{
int len = nums.size();
int l = 0, r = len - 1;
int loop_num = 0;
while (l < r) {
int flag1 = false;
int flag2 = false;
for (int i = l; i < r; i++)
{
if (nums[i] > nums[i + 1])
{
swap(nums[i], nums[i + 1]);
flag1 = true;
}
}
r--;
for (int j = r; j > l; j--)
{
if (nums[j] < nums[j - 1])
{
swap(nums[j], nums[j - 1]);
flag2 = true;
}
}
l++;
if (!(flag1 || flag2))
{
break;
}
++loop_num;
std::cout << "loop_num4 = " << loop_num << std::endl;
for (auto& num : nums)
{
std::cout << num << " ";
}
std::cout << std::endl;
}
}
int main()
{
vector<int> vec_1({ 13,22,47,92,4,34,56,23,45,567,23 });
bubbleSort_1(vec_1);
std::cout << std::endl << std::endl;
vector<int> vec_2({ 1,2,3,4,5,10,6,19,7,8 });
bubblesort_2(vec_2);
std::cout << std::endl << std::endl;
vector<int> vec_3({1, 2 ,3,10,4,12,5,6,11,7,8,9 });
bubblesort_3(vec_3);
std::cout << std::endl << std::endl;
vector<int> vec_4({1,3,2,10,4,12,6,5,11,9,8,7 });
cocktail_sort(vec_4);
system("pause");
return 0;
}