#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;
}