fork download
  1. #include <array>
  2. #include <iostream>
  3. #include <algorithm>
  4.  
  5. typedef std::array<int,63> iArray;
  6.  
  7. void Sort(iArray& Array){
  8. int S =0;
  9. int E = Array.size()-1;
  10. int Min=0;
  11. int Max=0;
  12.  
  13. while (std::is_sorted(Array.begin(),Array.end())!=true)
  14. {
  15. Min = S-1;
  16. Max = E+1;
  17. for(int i=S;i<=E;i++){
  18. if(Array[i]<Array[std::max(S,Min)]){
  19. Min=i;
  20. }
  21. if(Array[i]>Array[std::min(E,Max)]){
  22. //Max=i;//<-ここ
  23. }
  24. }
  25. if(Min==Max){
  26. E++;
  27. Max=E;
  28. }
  29. if(Min != (S-1)){
  30. std::swap(Array[S],Array[Min]);
  31. }
  32.  
  33. if(Max != (E+1)){
  34. std::swap(Array[E],Array[Max]);
  35. }
  36. S=std::min<int>(++S,Array.size()-1);
  37. //E=std::max(--E,0);//<-ここ
  38. }
  39.  
  40. }
  41.  
  42. void Show(iArray& Array){
  43. for(size_t i = 0 ;i<Array.size();i++){
  44. std::cout<<Array[i]<<' ';
  45. }
  46. std::cout<<std::endl;
  47. }
  48.  
  49. int main(){
  50.  
  51. iArray Array={0,};
  52.  
  53. for(size_t i=0;i<Array.size();i++){
  54. Array[i]=i;
  55.  
  56. }
  57. std::random_shuffle(Array.begin(),Array.end());
  58. Show(Array);
  59.  
  60. Sort(Array);
  61. Show(Array);
  62.  
  63. std::cout<<"Sorted = "<<std::is_sorted(Array.begin(),Array.end())<<std::endl;
  64.  
  65. return 0;
  66. }
Success #stdin #stdout 0s 2928KB
stdin
Standard input is empty
stdout
4 51 11 15 24 35 17 36 26 50 33 39 19 2 47 56 59 18 32 40 5 21 57 12 14 42 27 62 45 58 30 38 13 37 3 54 55 53 9 22 8 23 20 34 1 10 31 0 46 41 48 28 52 43 16 60 49 7 44 25 29 61 6 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 
Sorted = 1