一、冒泡排序
#include<iostream>
using namespace std;
class Bubble_sort
{
private:
int *a;
int n;
public:
Bubble_sort(){}
Bubble_sort(int N)
{
a=new int[N];
n=N;
}
void get()
{
for(int i=0;i<n;i++)cin>>a[i];
}
void swap(int *x,int *y)
{
int t=*x;
*x=*y;*y=t;
}
void sort()
{
int i,j;
for(i=0;i<n-1;i++)
{
for(j=1;j<n;j++)
{
if(a[j-1]>a[j])swap(a+j-1,a+j);
}
}
}
void print()
{
for(int i=0;i<n;i++)cout<<a[i]<<" ";
cout<<endl;
}
};
int main()
{
int n;
while(cin>>n)
{
Bubble_sort yoo(n);
yoo.get();
yoo.sort();
yoo.print();
}
return 0;
}
时间复杂度:o(n*n)
空间复杂度:o(1)
是一种稳定排序
二、冒泡排序的强化版
添加flag判断是否在一趟内循环中没有交换
void sort()
{
int i,j;
for(i=0;i<n-1;i++)
{
int flag=1;
for(j=1;j<n;j++)
{
if(a[j-1]>a[j])
{
swap(a+j-1,a+j);
flag=0;
}
}
if(flag)break;
}
}
时间复杂度:o(n*n)
空间复杂度:o(1)
是一种稳定排序