Advertisement
Guest User

sorting snippets

a guest
Nov 13th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. // Marijn Evers / s1036416 / Computing Science
  2. // Willem van de Krol / s1035713 / Computing Science
  3. #include <cassert>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. typedef int El; // TODO remove
  9.  
  10. struct Slice {
  11. int from; // 0 <= from
  12. int length; // 0 <= length
  13. };
  14.  
  15. int size(const vector<El>& data)
  16. {
  17. return static_cast<int>(data.size());
  18. }
  19.  
  20. Slice mk_slice(int from, int length)
  21. {
  22. assert(0 <= from && 0 <= length);
  23. return { from, length };
  24. }
  25.  
  26. Slice mk_slice(const vector<El>& data)
  27. {
  28. return { 0, size(data) };
  29. }
  30.  
  31. bool valid_slice(Slice s)
  32. {
  33. return 0 <= s.from && 0 <= s.length;
  34. }
  35.  
  36. bool valid_slice(const vector<El>& data, Slice s)
  37. {
  38. return valid_slice(s) && s.from + s.length <= size(data);
  39. }
  40.  
  41. int first(Slice s)
  42. {
  43. return s.from;
  44. }
  45.  
  46. int last(Slice s)
  47. {
  48. return s.from + s.length - 1;
  49. }
  50.  
  51. int max_value_at(const vector<El>& data, Slice s)
  52. {
  53. assert(valid_slice(data, s) && s.length > 0);
  54.  
  55. int max = first(s);
  56. for (int i = first(s)+1; i <= last(s); i++)
  57. if (data[i] > data[max])
  58. max = i;
  59. return max;
  60. }
  61.  
  62. bool is_sorted(const vector<El>& data, Slice s)
  63. {
  64. assert(valid_slice(data, s));
  65.  
  66. for (int i = first(s); i < last(s); i++)
  67. if (data[i] > data[i+1])
  68. return false;
  69. return true;
  70. }
  71.  
  72. void swap(vector<El>& data, int i, int j)
  73. {
  74. const El TEMP = data[i];
  75. data[i] = data[j];
  76. data[j] = TEMP;
  77. }
  78.  
  79. void insert(vector<El>& data, Slice s)
  80. {
  81. assert(s.length > 0 && is_sorted(data, mk_slice(s.from, s.length-1)));
  82.  
  83. int i = last(s) - 1;
  84. while (i >= first(s) && data[i] > data[i+1]) {
  85. swap(data, i, i+1);
  86. i--;
  87. }
  88. }
  89.  
  90. int main()
  91. {
  92. return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement