#include <array>
#include <iostream>
#include <algorithm>
typedef std::array<int,63> iArray;
void Sort(iArray& Array){
int S =0;
int E = Array.size()-1;
int Min=0;
int Max=0;
while (std::is_sorted(Array.begin(),Array.end())!=true)
{
Min = S-1;
Max = E+1;
for(int i=S;i<=E;i++){
if(Array[i]<Array[std::max(S,Min)]){
Min=i;
}
if(Array[i]>Array[std::min(E,Max)]){
//Max=i;//<-ここ
}
}
if(Min==Max){
E++;
Max=E;
}
if(Min != (S-1)){
std::swap(Array[S],Array[Min]);
}
if(Max != (E+1)){
std::swap(Array[E],Array[Max]);
}
S=std::min<int>(++S,Array.size()-1);
//E=std::max(--E,0);//<-ここ
}
}
void Show(iArray& Array){
for(size_t i = 0 ;i<Array.size();i++){
std::cout<<Array[i]<<' ';
}
std::cout<<std::endl;
}
int main(){
iArray Array={0,};
for(size_t i=0;i<Array.size();i++){
Array[i]=i;
}
std::random_shuffle(Array.begin(),Array.end());
Show(Array);
Sort(Array);
Show(Array);
std::cout<<"Sorted = "<<std::is_sorted(Array.begin(),Array.end())<<std::endl;
return 0;
}
I2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxhbGdvcml0aG0+Cgp0eXBlZGVmIHN0ZDo6YXJyYXk8aW50LDYzPiBpQXJyYXk7Cgp2b2lkIFNvcnQoaUFycmF5JiBBcnJheSl7CiAgICBpbnQgUyA9MDsKCWludCBFID0gQXJyYXkuc2l6ZSgpLTE7CglpbnQgTWluPTA7CglpbnQgTWF4PTA7CgoJd2hpbGUgKHN0ZDo6aXNfc29ydGVkKEFycmF5LmJlZ2luKCksQXJyYXkuZW5kKCkpIT10cnVlKQoJewoJCU1pbiA9IFMtMTsKCQlNYXggPSBFKzE7CgkJZm9yKGludCBpPVM7aTw9RTtpKyspewoJCQlpZihBcnJheVtpXTxBcnJheVtzdGQ6Om1heChTLE1pbildKXsKCQkJCU1pbj1pOwoJCQl9CgkJCWlmKEFycmF5W2ldPkFycmF5W3N0ZDo6bWluKEUsTWF4KV0pewoJCQkJLy9NYXg9aTsvLzwt44GT44GTCgkJCX0KCQl9CgkJaWYoTWluPT1NYXgpewoJCQlFKys7CgkJCU1heD1FOwoJCX0KCQlpZihNaW4gIT0gKFMtMSkpewoJCQlzdGQ6OnN3YXAoQXJyYXlbU10sQXJyYXlbTWluXSk7CgkJfQoKCQlpZihNYXggIT0gKEUrMSkpewoJCQlzdGQ6OnN3YXAoQXJyYXlbRV0sQXJyYXlbTWF4XSk7CgkJfQoJCVM9c3RkOjptaW48aW50PigrK1MsQXJyYXkuc2l6ZSgpLTEpOwoJCS8vRT1zdGQ6Om1heCgtLUUsMCk7Ly88LeOBk+OBkwoJfQoJCQp9Cgp2b2lkIFNob3coaUFycmF5JiBBcnJheSl7Cglmb3Ioc2l6ZV90IGkgPSAwIDtpPEFycmF5LnNpemUoKTtpKyspewoJCXN0ZDo6Y291dDw8QXJyYXlbaV08PCcgJzsKCX0KCXN0ZDo6Y291dDw8c3RkOjplbmRsOwp9CgppbnQgbWFpbigpewoKCWlBcnJheSBBcnJheT17MCx9OwoKCWZvcihzaXplX3QgaT0wO2k8QXJyYXkuc2l6ZSgpO2krKyl7CgkJQXJyYXlbaV09aTsKCgl9CglzdGQ6OnJhbmRvbV9zaHVmZmxlKEFycmF5LmJlZ2luKCksQXJyYXkuZW5kKCkpOwoJU2hvdyhBcnJheSk7CgoJU29ydChBcnJheSk7CglTaG93KEFycmF5KTsJCgoJc3RkOjpjb3V0PDwiU29ydGVkID0gIjw8c3RkOjppc19zb3J0ZWQoQXJyYXkuYmVnaW4oKSxBcnJheS5lbmQoKSk8PHN0ZDo6ZW5kbDsKCglyZXR1cm4gMDsKfQ==