#include<iostream>
using namespace std;
//交换元素
void swap(int &a,int &b)
{
int t;
t=a;a=b;b=t;
}
//输出元素
void print(int s[],int n)
{
for(int i=0;i<n;i++)
cout<<s[i]<<'\t';
cout<<endl;
}
//经典的冒泡算法,n个元素,比较n-1趟,每趟比较n-i次
void Bubblesort1(int s[],int n)
{
for(int i=1;i<=n;i++)
for(int j=0;j<n-i;j++)
if(s[j]>s[j+1])
swap(s[j],s[j+1]);
print(s,n);
}
//改进的冒泡算法,使用标记,在有序无需交换时退出
void Bubblesort2(int s[],int n)
{ int k=n;
bool flag=true;
while(flag)
{
flag=false;
for(int i=1;i<n;i++)
if(s[i-1]>s[i])
{swap(s[i-1],s[i]);
flag=true;}
n--;//去掉已经排好的
}
print(s,k);
}
//改进的冒泡算法,记录已经有序的位置,只比较无序的元素
void Bubblesort3(int s[],int n)
{
int flag=n,k;
while(flag>0)
{k=flag;
flag=0;
for(int i=1;i<k;i++)
if(s[i-1]>s[i])
{
swap(s[i-1],s[i]);
flag=i;
}
}
print(s,n);
}
//主函数
int main()
{
int a[4]={3,2,1,4};
Bubblesort1(a,4);
Bubblesort2(a,4);
Bubblesort3(a,4);
}
冒泡排序
最新推荐文章于 2022-04-29 23:24:15 发布