#include <iostream>
using namespace std;
typedef bool Cmp(int a,int b);
bool up(int a,int b) { return a<b; }
bool dn(int a,int b) { return a>b; }
void bubleSort(int tb[],size_t size,Cmp *cmp)
{
for(size_t last=0,stop=size;stop>0;stop=last,last=0)
{
for(size_t i=1;i<stop;++i)
{
if(cmp(tb[i-1],tb[i]))
{
int tmp=tb[i-1];
tb[i-1]=tb[i];
tb[i]=tmp;
last=i;
}
}
}
}
void show(int tb[],size_t size)
{
cout<<"{";
for(size_t i=0;i<size;++i) cout<<(", "+!i)<<tb[i];
cout<<" }\n";
}
int main()
{
int tb[]={8,5,9,2,3,1,4,7,6};
show(tb,sizeof(tb)/sizeof(*tb));
bubleSort(tb,sizeof(tb)/sizeof(*tb),up);
show(tb,sizeof(tb)/sizeof(*tb));
bubleSort(tb,sizeof(tb)/sizeof(*tb),dn);
show(tb,sizeof(tb)/sizeof(*tb));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBib29sIENtcChpbnQgYSxpbnQgYik7CmJvb2wgdXAoaW50IGEsaW50IGIpIHsgcmV0dXJuIGE8YjsgfQpib29sIGRuKGludCBhLGludCBiKSB7IHJldHVybiBhPmI7IH0Kdm9pZCBidWJsZVNvcnQoaW50IHRiW10sc2l6ZV90IHNpemUsQ21wICpjbXApCiAgewogICBmb3Ioc2l6ZV90IGxhc3Q9MCxzdG9wPXNpemU7c3RvcD4wO3N0b3A9bGFzdCxsYXN0PTApCiAgICAgewogICAgICBmb3Ioc2l6ZV90IGk9MTtpPHN0b3A7KytpKQogICAgICAgIHsKICAgICAgICAgaWYoY21wKHRiW2ktMV0sdGJbaV0pKQogICAgICAgICAgIHsKICAgICAgICAgICAgaW50IHRtcD10YltpLTFdOwogICAgICAgICAgICB0YltpLTFdPXRiW2ldOwogICAgICAgICAgICB0YltpXT10bXA7CiAgICAgICAgICAgIGxhc3Q9aTsKICAgICAgICAgICB9CiAgICAgICAgfQogICAgIH0KICB9CiAKdm9pZCBzaG93KGludCB0YltdLHNpemVfdCBzaXplKQogIHsKICAgY291dDw8InsiOwogICBmb3Ioc2l6ZV90IGk9MDtpPHNpemU7KytpKSBjb3V0PDwoIiwgIishaSk8PHRiW2ldOwogICBjb3V0PDwiIH1cbiI7CiAgfSAKIAppbnQgbWFpbigpCiAgewogICBpbnQgdGJbXT17OCw1LDksMiwzLDEsNCw3LDZ9OwogICBzaG93KHRiLHNpemVvZih0Yikvc2l6ZW9mKCp0YikpOwogICBidWJsZVNvcnQodGIsc2l6ZW9mKHRiKS9zaXplb2YoKnRiKSx1cCk7CiAgIHNob3codGIsc2l6ZW9mKHRiKS9zaXplb2YoKnRiKSk7CiAgIGJ1YmxlU29ydCh0YixzaXplb2YodGIpL3NpemVvZigqdGIpLGRuKTsKICAgc2hvdyh0YixzaXplb2YodGIpL3NpemVvZigqdGIpKTsKICAgcmV0dXJuIDA7CiAgfQ==
{ 8, 5, 9, 2, 3, 1, 4, 7, 6 }
{ 9, 8, 7, 6, 5, 4, 3, 2, 1 }
{ 1, 2, 3, 4, 5, 6, 7, 8, 9 }