Guest User

Untitled

a guest
May 27th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.22 KB | None | 0 0
  1. #include <string>
  2. #include <ctime>
  3. template <class T>
  4. bool sequential_search(T *p, int size,T key, int (*f)(T a, T b), int & pos)
  5. {
  6. for (int i = 0 ; i < size; i++)
  7. {
  8. if (f(p[i], key)==0)
  9. {
  10. pos = i;
  11. return true;
  12. }
  13. }
  14. return false;
  15. };
  16. template <class T>
  17. bool binary_search (T *p, int size, T key, int(*f)(T a, T b), int &pos)
  18. {
  19. bubble_sort(p, size);
  20. print(p, size);
  21. int begin=0, end = size - 1;
  22. while (begin <= end)
  23. {
  24. int med = (end + begin)/2;
  25. if (f(key, p[med])>0)// если число лежит правее med, то оно больше, и теперь рассматриваем массив с начальным элементом p[med]
  26. begin = med+1;
  27. else if(f(key, p[med])<0)// если число лежит левее med, то оно меньше, и теперь рассматриваем массив с последним элементом p[med]
  28. end = med-1;
  29. else if (f(key,p[med])==0)
  30. {
  31. pos = med;// если med равняется искомому числу, задача выполнена
  32. return true;
  33. }
  34. }
  35. return false;
  36. }
  37. template <class T>
  38. int comp_int(T a, T b)
  39. {
  40. if (a>b)
  41. return 1;
  42. else if(a<b)
  43. return -1;
  44. else if(a==b)
  45. return 0;
  46. }
  47. struct student
  48. {
  49. char *Name;
  50. int group;
  51. int tel;
  52. char *mw;
  53. char *birthday;
  54.  
  55. student()// структура
  56. {
  57. Name = NULL;
  58. group = 0;
  59. tel = 0;
  60. mw = "-";
  61. birthday = NULL;
  62. }
  63. };
  64. int student_comp(student A, student B)
  65. {
  66. return strcmp(A.Name, B.Name);
  67. };
  68. int char_cmp(const char* str1, const char* str2)
  69. {
  70. return strcmp(str1, str2);
  71. }
  72. void print(student St)
  73. {
  74. printf("Name:\t %s\n", St.Name);
  75. printf("Group:\t %d\n", St.group);
  76. printf("Telephone:\t %d\n", St.tel);
  77. printf("Pol:\t %c\n", St.mw);
  78. printf("Birthday:\t %s\n", St.birthday);
  79. }
  80. int *rand_int(int N)
  81. {
  82. srand((unsigned)time(NULL));
  83. int *p = new int[N];
  84. for(int i = 0; i < N; i++)
  85. p[i] = rand()%99+1;
  86. return p;
  87. }
  88. double *rand_double(int N)
  89. {
  90. srand((unsigned)time(NULL));
  91. double *p = new double[N];
  92. for(int i = 0; i < N; i++)
  93. p[i] = rand()%99+1;
  94. return p;
  95. }
  96. template <class T>
  97. void print(T *p, int N)
  98. {
  99. for(int i = 0; i < N; i++)
  100. cout << p[i] << " ";
  101. cout << endl;
  102. }
  103. template <class T>
  104. void bubble_sort(T *p, int n)
  105. {
  106. for (int i = 0; i < n; i++)
  107. {
  108. for (int j = 1; j < n-i; j++)
  109. {
  110. if(p[j-1]>p[j])
  111. {
  112. T tmp = p[j];
  113. p[j]=p[j-1];
  114. p[j-1]=tmp;
  115. }
  116. }
  117. }
  118. }
  119. template <class T>
  120. int interpolation_search(T* p ,int n, T key)
  121. {
  122. bubble_sort(p, n);
  123. print(p, n);
  124. int low = 0;
  125. int high = n - 1;
  126. int med;
  127. while (p[low] <= key && p[high] >= key)
  128. {
  129. med = low + ((key - p[low]) * (high - low)) / (p[high] - p[low]); // вычисление следующей пробы
  130. if (p[med] < key) low = med + 1; // проверяем, как соотносится ключ с элементами этого интервала
  131. else if (p[med] > key) high = med - 1;
  132. else return med;
  133. }
  134. if (p[low] == key) return low; // после того, как вышли из цикла, проверяем, является ли нижняя граница последнего интервала ключом
  135. else return -1;
  136. }
Add Comment
Please, Sign In to add comment