p
15 декабря 2019 г. 5:30

Сортировка Шелла

Отсортировать первую половину массива по возрастанию, а вторую - по убыванию. Использовать сортировку Шелла

Написал код, мозг кипит сижу уже целый день, если можно исправьте ошибки пожалуйста.

  1. #include <iostream>
  2. #include <ctime>
  3. using namespace std;
  4.  
  5. void ShellSort(int** A, int ROW, int COL);
  6.  
  7. int main()
  8. {
  9. setlocale(LC_ALL, "rus");
  10. srand(time(NULL));
  11. int ROW, COL;
  12. cout << "Введите кол-во строк" << endl;
  13. cin >> ROW;
  14. cout << "Введите кол-во столбцов" << endl;
  15. cin >> COL;
  16.  
  17. int** A = new int* [ROW];
  18. for (int i = 0; i < ROW; i++)
  19. {
  20. A[i] = new int[COL];
  21. }
  22.  
  23. for (int i = 0; i < ROW; i++)
  24. {
  25. for (int j = 0; j < COL; j++)
  26. {
  27. A[i][j] = rand() % 30;
  28. cout << A[i][j] << " ";
  29. }
  30. cout << endl;
  31. }
  32. ShellSort(A, ROW, COL);
  33.  
  34.  
  35. }
  36. void ShellSort(int** A, int ROW, int COL)
  37. {
  38. int step, temp;
  39. int i, j;
  40. for (step = (ROW * COL) / 2; step > 0; step /= 2)
  41. {
  42. for (i = step; i < (ROW * COL); i++)
  43. {
  44. for (j = i - step; j >= 0 && A[j] > A[j + step]; j -= step)
  45. {
  46. if (A[j] > A[j + 1])
  47. {
  48. temp = A[j];
  49. A[j] = A[j + step];
  50. A[j + step] = temp;
  51. }
  52. if (A[j] < A[j + 1])
  53. {
  54. temp = A[j];
  55. A[j] = A[j + step];
  56. A[j + step] = temp;
  57. }
  58. }
  59. }
  60. for (int i = 0; i <ROW; i++)
  61. {
  62. for (int j = 0; j < COL; j++)
  63. {
  64. cout << A[i][j] << " ";
  65. }
  66. cout << endl;
  67. }
  68.  
  69. }
  70. }
2

Вам это нравится? Поделитесь в социальных сетях!

0

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь