1.向后冒泡图解
代码实现:
#include<iostream>
using namespace std;
//向后冒泡,求出每趟最大值,放到len-1位置
void BubbleSort(int *arr, int len)
{
int tmp = 0;
int i;
for (i = 0;i<len-1;i++)
{
for (int j = 0;j <len-1-i;j++)//从最前两个位置开始比较
{
if (arr[j+1] < arr[j])//比较相邻位置大小,前者比后者大,则调换位置
{
tmp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = tmp;
}
}
}
cout << "向后冒泡排序轮数: "<< i + 1 << endl;
return;
}
void main()
{
int arr[] = { 3,4,43,22,67,1};
int len = sizeof(arr) / sizeof(arr[1]);
BubbleSort(arr, len);
for (int i = 0;i < len;i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
结果:
2. 向前冒泡
代码实现:
#include<iostream>
using namespace std;
//向前冒泡,求出每趟最小值,放到最前
void BubbleSort1(int *arr, int len)
{
int tmp = 0;
int i;
for (i = 0;i<len-1;i++)//趟数
{
for (int j = len-1;j >i;j--)//从最后两个位置开始比较
{
if (arr[j] < arr[j-1])//比较相邻位置大小,前者比后者大,则调换位置
{
tmp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = tmp;
}
}
}
cout << "向前冒泡排序轮数: " << i + 1 << endl;
return;
}
void main()
{
int arr[] = { 3,4,43,22,67,1};
int len = sizeof(arr) / sizeof(arr[1]);
BubbleSort1(arr, len);
for (int i = 0;i < len;i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
结果:
3. 向后冒泡优化
代码实现:
#include<iostream>
using namespace std;
//向后冒泡优化
void BubbleSort2(int *arr, int len)
{
int tmp = 0;
int tag = 1;//标志:表明数组是否排好序,0排好序,1没有排好
int i;
for (i = 0;(i<len-1)&&tag;i++)//从位置0开始
{
tag = 0;//排序后,认为排序完成
for (int j = 0;j <len-1-i;j++)
{
if (arr[j+1] < arr[j])//比较相邻位置大小,前者比后者大,则调换位置
{
tmp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = tmp;
tag = 1;//if为真,则未完成排序,需继续排序
}
}
}
cout << "优化后的向后冒泡排序轮数: " << i +1<< endl;
return;
}
void main()
{
int arr[] = { 3,4,43,22,67,1};
int len = sizeof(arr) / sizeof(arr[1]);
BubbleSort2(arr, len);
for (int i = 0;i < len;i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
结果:
4. 向前冒泡优化
代码实现:
#include<iostream>
using namespace std;
//向前冒泡优化
void BubbleSort3(int *arr, int len)
{
int tmp = 0;
int tag = 1;//标志:表明数组是否排好序,0排好序,1没有排好
int i;
for (i = 0;(i<len - 1) && tag;i++)//从位置0开始
{
tag = 0;//排序后,认为排序完成
for (int j = len-1;j >i;j--)
{
if (arr[j] < arr[j - 1])//比较相邻位置大小,前者比后者大,则调换位置
{
tmp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = tmp;
tag = 1;//if为真,则未完成排序,需继续排序
}
}
}
cout << "优化后的向后冒泡排序轮数: " << i + 1 << endl;
return;
}
void main()
{
int arr[] = { 3,4,43,22,67,1};
int len = sizeof(arr) / sizeof(arr[1]);
BubbleSort3(arr, len);
for (int i = 0;i < len;i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
结果;