Специальная сортировка массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дан числовой массив размера N. Наименьший из элементов массива поместить на первое место в массиве, наименьший из оставшихся — на последнее место, следующий по величине — на второе место, следующий — на предпоследнее, и так далее, до середины массива. Написала следующее, но программа не всегда работает верно, помогите исправить
Листинг программы
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<Windows.h>
  4. #include<locale.h>
  5. #include<time.h>
  6. int random(int N)
  7. {
  8. return rand() % N;
  9. }
  10. void main()
  11. {
  12. setlocale(LC_ALL, "russian");
  13. int N;
  14. int f;
  15. int x, y, min, min1, b, i, j;
  16. printf("Введите размер массива:");
  17. scanf("%d", &N);
  18. int *A = new int[N];
  19. do
  20. {
  21. printf("Для ввода элементов случайным образом нажмите 0, для заполнения самостоятельно нажмите 1\n");
  22. scanf("%d", &f);
  23. } while (f >= 2);
  24. x = 0;
  25. y = N - 1;
  26. if (f == 0)
  27. {
  28. srand(clock());
  29. for (i = 0; i < N; i++)
  30. {
  31. A[i] = 0 + rand() % 10;
  32. }
  33. }
  34. else
  35. if (f == 1)
  36. {
  37. printf("Введите %d элементов массива A:\n", N);
  38. for (i = 0; i < N; i++)
  39. {
  40. printf("A[%d]=", i);
  41. scanf("%d", &A[i]);
  42. }
  43. }
  44. printf("Исходный массив А:\n");
  45. for (i = 0; i < N; i++)
  46. {
  47. printf("%d", A[i]);
  48. printf("\n");
  49. }
  50. for (i = 0; i < N; i++)
  51. {
  52. min = A[x];
  53. min1 = A[y];
  54. for (j = x; j < y; j++)
  55. {
  56. if (A[j] < min)
  57. {
  58. min = A[j];
  59. b = A[x];
  60. A[x] = min;
  61. A[j] = b;
  62. }
  63. }
  64. x++;
  65. for (j = x; j < y; j++)
  66. {
  67. if (A[j] < min1)
  68. {
  69. min1 = A[j];
  70. b = A[y];
  71. A[y] = min1;
  72. A[j] = b;
  73. }
  74. }
  75. y--;
  76. }
  77. printf("Новый массив:\n");
  78. for (i = 0; i < N; i++)
  79. printf("%d\n", A[i]);
  80. system("pause");
  81. }

Решение задачи: «Специальная сортировка массива»

textual
Листинг программы
  1.         min_j = x; // индекс минимального элемента
  2.         for (j = x+1; j < y; j++)//ищем первое минимальное значение
  3.         {
  4.             if (A[j] < A[min_j]) {
  5.                 min_j = j;
  6.             }
  7.         }
  8.        
  9.         b = A[x];
  10.         A[x] = A[min_j];
  11.         A[min_j] = b;
  12.        
  13.         x++;//двигаемся к центру массива с левого края

Объяснение кода листинга программы

  1. Инициализируется переменная min_j значением x - это индекс элемента, который в данный момент считается минимальным.
  2. Запускается цикл for, который начинается с x+1 и продолжается до y, пропуская x (так как мы уже знаем, что элемент с индексом x минимальный). В каждой итерации цикла проверяется, является ли текущий элемент меньше, чем элемент с индексом min_j. Если это так, то обновляется значение min_j.
  3. После завершения цикла, в переменной min_j хранится индекс минимального элемента.
  4. Значение элемента с индексом x копируется в переменную b.
  5. Значение в b заменяется значением элемента с индексом min_j.
  6. Значение элемента с индексом min_j заменяется значением из переменной b.
  7. Переменная x увеличивается на 1, перемещаясь к следующему элементу слева от центрального.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы