Advertisement
Guest User

Untitled

a guest
Mar 20th, 2019
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <string>
  4. #include <time.h>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. void setMinAndMax(int arr[], int size, int *min, int *max) {
  10. if (size < 1) {
  11. return;
  12. }
  13. int tmpMin = arr[0], tmpMax = arr[0];
  14. for (int i = 0; i < size; i++) {
  15. if (arr[i] < tmpMin) {
  16. tmpMin = arr[i];
  17. }
  18. if (arr[i] > tmpMax) {
  19. tmpMax = arr[i];
  20. }
  21. }
  22. *min = tmpMin;
  23. *max = tmpMax;
  24. }
  25.  
  26. void bubbleSort(vector<int> *vec) {
  27. for (int i = 0; i < (*vec).size(); i++) {
  28. for (int j = 1; j < (*vec).size(); j++) {
  29. if ((*vec)[j - 1] > (*vec)[j]) {
  30. int temp = (*vec)[j - 1];
  31. (*vec)[j - 1] = (*vec)[j];
  32. (*vec)[j] = temp;
  33. }
  34. }
  35. }
  36. }
  37.  
  38. void bucketSort(int arr[], int size) {
  39. int min = 0, max = 0;
  40. setMinAndMax(arr, size ,&min, &max);
  41. if (min == max) {
  42. return;
  43. }
  44.  
  45. int bucketsCount = size / 10 < 5 ? size/2 : size/10;
  46. float range = max - min;
  47. vector<vector<int>> buckets;
  48.  
  49. for (int i = 0; i < bucketsCount; i++) {
  50. buckets.push_back(vector<int>());
  51. }
  52.  
  53. for (int i = 0; i < size; i++) {
  54. int index = (int)(arr[i] * bucketsCount / range);
  55. buckets[index >= bucketsCount ? bucketsCount - 1 : index].push_back(arr[i]);
  56. }
  57.  
  58. for (int i = 0; i < bucketsCount; i++) {
  59. bubbleSort(&buckets[i]);
  60. }
  61.  
  62. int curIndex = 0;
  63.  
  64. for (int i = 0; i < bucketsCount; i++) {
  65. for (int j = 0; j < buckets[i].size(); j++) {
  66. arr[curIndex] = buckets[i][j];
  67. curIndex++;
  68. }
  69. }
  70. }
  71.  
  72. int main()
  73. {
  74. int size;
  75. cin >> size;
  76. int *inputArray = new int[size];
  77.  
  78. srand(time(NULL));
  79.  
  80. for (int i = 0; i < size; i++) {
  81. inputArray[i] = rand() % 101;
  82. cout << inputArray[i] << " ";
  83. }
  84.  
  85. cout << endl;
  86.  
  87. bucketSort(inputArray, size);
  88.  
  89. for (int i = 0; i < size; i++) {
  90. cout << inputArray[i] << " ";
  91. }
  92.  
  93. return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement