fork download
  1. #include <iostream>
  2.  
  3. void shellsort(std::pair<int, int>* a, int leng);
  4.  
  5. int main()
  6. {
  7. int n, i, j = 0;
  8. std::cout << "Enter size:" << std::endl;
  9. std::cin >> n;
  10. std::cout << "Enter elements:" << std::endl;
  11. std::pair<int, int>* mas = new std::pair<int, int>[n];
  12. for (i = 0; i < n; i++)
  13. {
  14. std::cin >> mas[i].first;
  15. mas[i].second = i;
  16. }
  17. shellsort(mas, n);
  18. for (int i = 0; i < n; ++i) {
  19. std::cout << mas[i].first << " ";
  20. }
  21. std::cout << std::endl;
  22. for (int i = 0; i < n; ++i) {
  23. std::cout << mas[i].second << " ";
  24. }
  25. std::cout << std::endl;
  26. std::cout << "min ind: " << mas[n - 1].second << std::endl;
  27. std::cout << "max ind: " << mas[0].second;
  28. delete[] mas;
  29. }
  30.  
  31. void shellsort(std::pair<int, int>* a, int leng)
  32. {
  33. int k = 0, i, j, p, step;
  34. std::pair<int, int> temp;
  35. int* gap = new int[leng];
  36. gap[0] = leng / 2;
  37. while (gap[k] > 1)
  38. {
  39. k++;
  40. gap[k] = gap[k - 1] / 2;
  41. }
  42. for (i = 0; i <= k; i++)
  43. {
  44.  
  45. step = gap[i];
  46. for (j = step; j < leng; j++)
  47. {
  48. temp = a[j];
  49. p = j - step;
  50. while (p >= 0 && temp.first > a[p].first)
  51. {
  52. a[p + step] = a[p];
  53. p = p - step;
  54. }
  55. a[p + step] = temp;
  56. }
  57. }
  58. }
Success #stdin #stdout 0s 4508KB
stdin
6
5 7 6 3 2 4
stdout
Enter size:
Enter elements:
7 6 5 4 3 2 
1 2 0 5 3 4 
min ind: 4
max ind: 1