Сортировка векторов методами: пузырька, Хоара, Шейкерная сортировка - C (СИ)

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

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

Сортировка векторов методами: пузырька, Хоараб, Шейкерная сортировка Каждый отдельный алгоритм должен быть оформлен в виде функции, обращение к которым осуществляется из функции main() Я сделала функции для пузырька и шейкерной сортировок, а вот сортировку Хоара не могу, помогите пожалуйста
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <math.h>
  4. #include <time.h>
  5. void vorm_vector(int nn, int vect_max, int vect_min, int vect[nn]);
  6. void bubble_sort (int nn, int vector[nn]);
  7. void sheiker_sort(int nn, int vector[nn]);
  8.  
  9. int main()
  10. {
  11. int i, vector_min, vector_max, n ;
  12.  
  13. printf("\n**** please enter ****");
  14. printf("\n");
  15. printf("\n min=");
  16. scanf("%d", &vector_min);
  17. printf("\n max=");
  18. scanf("%d", &vector_max);
  19. printf("\n n=");
  20. scanf("%d", &n);
  21. printf("\n");
  22. int vector[n];
  23.  
  24. vorm_vector(n, vector_max, vector_min, vector);
  25. printf("\nOriginal vector:\n");
  26. for(i = 0; i < n; i++)
  27. printf(" %4d", vector[i]);
  28. printf("\n");
  29. bubble_sort (n, vector);
  30. printf("\nBubble sort:\n");
  31. for(i = 0; i<n; i++)
  32. printf(" %4d", vector[i]);
  33. printf("\n");
  34. sheiker_sort (n, vector);
  35. printf("\nSheiker sort:\n");
  36. for(i = 0; i<n; i++)
  37. printf(" %4d", vector[i]);
  38. printf("\n");
  39. return 0;
  40. }
  41. void vorm_vector(int nn, int vect_max, int vect_min, int vect[nn])
  42. {
  43. int i, m;
  44. time_t t; // текущее время для инициализации
  45. // генератора случайных чисел
  46. srand((unsigned) time(&t)); // инициализация генератора
  47. // случайных чисел
  48. m = vect_max-vect_min + 1;
  49. // получение случайного числа в диапазоне
  50. // от vector_min до vector_max
  51. for (i=0; i<nn; i++)
  52. vect[i]=rand()% m + vect_min;
  53. }
  54. // 2. Сортировка пузырьком
  55. void bubble_sort(int nn, int vect[nn])
  56. {
  57. int i, m, temp;
  58. for (m=nn-2; m>=0 ;m--)
  59. for (i=0; i<=m ;i++)
  60. if (vect[i] > vect[i+1])
  61. {
  62. temp = vect[i];
  63. vect[i] = vect[i+1];
  64. vect[i+1]= temp;
  65. }
  66. }
  67. // 3. Шейкерная сортировка
  68. void sheiker_sort(int nn, int vect[nn])
  69. {
  70. int l, r, i, k, temp;
  71. k = l = 0;
  72. r = nn - 2;
  73. while(l <= r)
  74. {
  75. for(i = l; i <= r; i++)
  76. if (vect[i] > vect[i+1])
  77. {
  78. temp = vect[i];
  79. vect[i] = vect[i+1];
  80. vect[i+1] = temp;
  81. k = i;
  82. }
  83. r = k - 1;
  84. for(i = r; i >= l; i--)
  85. if (vect[i] > vect[i+1])
  86. {
  87. temp = vect[i];
  88. vect[i] = vect[i+1];
  89. vect[i+1] = temp;
  90. k = i;
  91. }
  92. l = k + 1;
  93. }
  94. }
  95. [size="1"][color="grey"][I]Добавлено через 3 минуты[/I][/color][/size]
  96. Это сортировка Хоара
  97. #include <stdio.h>
  98. #include <math.h>
  99. #include <conio.h>
  100. #include <locale.h>
  101. #define N 256
  102. int a[N];
  103. void qsort(int l, int r)
  104. {
  105. int w,x,i,j;
  106. i=l;
  107. j=r;
  108. x=a[(l+r)/2];
  109. while (i<=j)
  110. {
  111. while (a[i]<x) i++;
  112. while (x<a[j]) j--;
  113. if (i<=j)
  114. {
  115. w=a[i]; a[i]=a[j]; a[j]=w;
  116. i++; j--;
  117. }
  118. }
  119. if (l<j) qsort(l,j);
  120. if (i<r) qsort(i,r);
  121. }
  122. void main()
  123. {
  124. int i,n;
  125. srand((unsigned) time(NULL));
  126. printf("Enter N: "); scanf("%d", &n);
  127. for (i=0; i<n; i++)
  128. {
  129. a[i]=1+rand()%n;
  130. printf("%d ", a[i]);
  131. }
  132. printf("\n");
  133. qsort(0,n-1);
  134. for (i=0; i<n; i++)
  135. {
  136. printf("%d ", a[i]);
  137. }
  138. printf("\n");
  139. }

Решение задачи: «Сортировка векторов методами: пузырька, Хоара, Шейкерная сортировка»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. #define N 10
  4. int a[N] = {5,2,6,0,11,7,6,7,4,2};
  5.  
  6.  
  7. int sort(int *a, int last)
  8. {
  9.     int t=0;
  10.     for (int i=0; i<last; i++)
  11.     {
  12.         if (a[i] > a[last])
  13.         {
  14.             t=a[i];
  15.             a[i] = a[last];
  16.             a[last] = t;
  17.         }
  18.     }
  19.     if (last > 1)
  20.     {
  21.         last--;
  22.         sort(a,last);
  23.     }
  24.     else return 0;
  25. }
  26.  
  27. int main()
  28. {
  29.     sort(a,N-1);
  30.     for (int i=0; i<N; i++) printf ("%d ",a[i]);
  31.     return 0;
  32. }

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

  1. Подключение стандартной библиотеки для работы с консолью (stdio.h).
  2. Определение массива a с фиксированным размером N = 10 и инициализация его значениями.
  3. Объявление функции sort, которая принимает указатель на массив и индекс последнего элемента для сортировки.
  4. Передача в функцию sort указателя на массив a и значение N-1 (так как последний элемент не нужно сортировать).
  5. Вывод отсортированного массива в консоль.
  6. Возврат 0 функцией main, что означает корректное завершение работы программы.

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


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

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

7   голосов , оценка 4.143 из 5

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

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

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