Advertisement
Guest User

Untitled

a guest
Jan 20th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.72 KB | None | 0 0
  1. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
  2.  
  3. 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
  4.  
  5. 1 ? ? 0 ? ? ?
  6.  
  7. 0
  8. 0 1
  9. 1 0 2
  10. 2 0 1 3
  11. 1 3 0 2 4
  12. 4 2 0 1 3 5
  13. 1 5 3 0 2 4 6
  14. 4 2 6 0 1 3 5 7
  15. 1 5 3 7 0 2 4 6 8
  16. 8 2 6 4 0 1 3 5 7 9
  17. 1 9 3 7 5 0 2 4 6 8 10
  18. 6 2 10 4 8 0 1 3 5 7 9 11
  19. 1 7 3 11 5 9 0 2 4 6 8 10 12
  20. 10 2 8 4 12 6 0 1 3 5 7 9 11 13
  21. 1 11 3 9 5 13 7 0 2 4 6 8 10 12 14
  22. 8 2 12 4 10 6 14 0 1 3 5 7 9 11 13 15
  23. 1 9 3 13 5 11 7 15 0 2 4 6 8 10 12 14 16
  24. 16 2 10 4 14 6 12 8 0 1 3 5 7 9 11 13 15 17
  25. 1 17 3 11 5 15 7 13 9 0 2 4 6 8 10 12 14 16 18
  26. 10 2 18 4 12 6 16 8 14 0 1 3 5 7 9 11 13 15 17 19
  27. 1 11 3 19 5 13 7 17 9 15 0 2 4 6 8 10 12 14 16 18 20
  28. 16 2 12 4 20 6 14 8 18 10 0 1 3 5 7 9 11 13 15 17 19 21
  29. 1 17 3 13 5 21 7 15 9 19 11 0 2 4 6 8 10 12 14 16 18 20 22
  30. 12 2 18 4 14 6 22 8 16 10 20 0 1 3 5 7 9 11 13 15 17 19 21 23
  31. 1 13 3 19 5 15 7 23 9 17 11 21 0 2 4 6 8 10 12 14 16 18 20 22 24
  32.  
  33. // g++ -std=c++11 worstCaseQuicksort.cpp && ./a.out
  34.  
  35. #include <algorithm> // swap
  36. #include <iostream>
  37. #include <vector>
  38. #include <numeric> // iota
  39.  
  40. int main( void )
  41. {
  42. std::vector<int> v(20); /**< will hold the worst case later */
  43.  
  44. /* p basically saves the indices of what was the initial position of the
  45. * elements of v. As they get swapped around by Quicksort p becomes a
  46. * permutation */
  47. auto p = v;
  48. std::iota( p.begin(), p.end(), 0 );
  49.  
  50. /* in the worst case we need to work on v.size( sequences, because
  51. * the initial sequence is always split after the first element */
  52. for ( auto i = 0u; i < v.size(); ++i )
  53. {
  54. /* i can be interpreted as:
  55. * - subsequence starting index
  56. * - current minimum value, if we start at 0 */
  57. /* note thate in the last step iPivot == v.size()-1 */
  58. auto const iPivot = ( v.size()-1 + i )/2;
  59. v[ p[ iPivot ] ] = i;
  60. std::swap( p[ iPivot ], p[i] );
  61. }
  62.  
  63. for ( auto x : v ) std::cout << " " << x;
  64. }
  65.  
  66. auto p = v;
  67. std::iota( p.begin(), p.end(), 0 );
  68. auto i = 0u;
  69. for ( ; i < v.size(); i+=2 )
  70. {
  71. auto const iPivot0 = i;
  72. auto const iPivot1 = ( i + v.size()-1 )/2;
  73. v[ p[ iPivot1 ] ] = i+1;
  74. v[ p[ iPivot0 ] ] = i;
  75. std::swap( p[ iPivot1 ], p[i+1] );
  76. }
  77. if ( v.size() > 0 && i == v.size() )
  78. v[ v.size()-1 ] = i-1;
  79.  
  80. 0
  81. 0 1
  82. 0 1 2
  83. 0 1 2 3
  84. 0 2 1 3 4
  85. 0 2 1 3 4 5
  86. 0 4 2 1 3 5 6
  87. 0 4 2 1 3 5 6 7
  88. 0 4 2 6 1 3 5 7 8
  89. 0 4 2 6 1 3 5 7 8 9
  90. 0 8 2 6 4 1 3 5 7 9 10
  91. 0 8 2 6 4 1 3 5 7 9 10 11
  92. 0 6 2 10 4 8 1 3 5 7 9 11 12
  93. 0 6 2 10 4 8 1 3 5 7 9 11 12 13
  94. 0 10 2 8 4 12 6 1 3 5 7 9 11 13 14
  95. 0 10 2 8 4 12 6 1 3 5 7 9 11 13 14 15
  96. 0 8 2 12 4 10 6 14 1 3 5 7 9 11 13 15 16
  97. 0 8 2 12 4 10 6 14 1 3 5 7 9 11 13 15 16 17
  98. 0 16 2 10 4 14 6 12 8 1 3 5 7 9 11 13 15 17 18
  99. 0 16 2 10 4 14 6 12 8 1 3 5 7 9 11 13 15 17 18 19
  100. 0 10 2 18 4 12 6 16 8 14 1 3 5 7 9 11 13 15 17 19 20
  101. 0 10 2 18 4 12 6 16 8 14 1 3 5 7 9 11 13 15 17 19 20 21
  102. 0 16 2 12 4 20 6 14 8 18 10 1 3 5 7 9 11 13 15 17 19 21 22
  103. 0 16 2 12 4 20 6 14 8 18 10 1 3 5 7 9 11 13 15 17 19 21 22 23
  104. 0 12 2 18 4 14 6 22 8 16 10 20 1 3 5 7 9 11 13 15 17 19 21 23 24
  105.  
  106. srand(0); // you shouldn't use 0 as a seed
  107. for ( auto i = 0u; i < v.size(); ++i )
  108. {
  109. auto const iPivot = i + rand() % ( v.size() - i );
  110.  
  111. 0
  112. 1 0
  113. 1 0 2
  114. 2 3 1 0
  115. 1 4 2 0 3
  116. 5 0 1 2 3 4
  117. 6 0 5 4 2 1 3
  118. 7 2 4 3 6 1 5 0
  119. 4 0 3 6 2 8 7 1 5
  120. 2 3 6 0 8 5 9 7 1 4
  121. 3 6 2 5 7 4 0 1 8 10 9
  122. 8 11 7 6 10 4 9 0 5 2 3 1
  123. 0 12 3 10 6 8 11 7 2 4 9 1 5
  124. 9 0 8 10 11 3 12 4 6 7 1 2 5 13
  125. 2 4 14 5 9 1 12 6 13 8 3 7 10 0 11
  126. 3 15 1 13 5 8 9 0 10 4 7 2 6 11 12 14
  127. 11 16 8 9 10 4 6 1 3 7 0 12 5 14 2 15 13
  128. 6 0 15 7 11 4 5 14 13 17 9 2 10 3 12 16 1 8
  129. 8 14 0 12 18 13 3 7 5 17 9 2 4 15 11 10 16 1 6
  130. 3 6 16 0 11 4 15 9 13 19 7 2 10 17 12 5 1 8 18 14
  131. 6 0 14 9 15 2 8 1 11 7 3 19 18 16 20 17 13 12 10 4 5
  132. 14 16 7 9 8 1 3 21 5 4 12 17 10 19 18 15 6 0 11 2 13 20
  133. 1 2 22 11 16 9 10 14 12 6 17 0 5 20 4 21 19 8 3 7 18 15 13
  134. 22 1 15 18 8 19 13 0 14 23 9 12 10 5 11 21 6 4 17 2 16 7 3 20
  135. 2 19 17 6 10 13 11 8 0 16 12 22 4 18 15 20 3 24 21 7 5 14 9 1 23
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement