Сортировка векторов методами: пузырька, Хоара, Шейкерная сортировка - C (СИ)
Формулировка задачи:
Сортировка векторов методами: пузырька, Хоараб, Шейкерная сортировка
Каждый отдельный алгоритм должен быть оформлен в виде функции, обращение к которым осуществляется из функции main()
Я сделала функции для пузырька и шейкерной сортировок, а вот сортировку Хоара не могу, помогите пожалуйста
Листинг программы
- #include <stdio.h>
- #include <conio.h>
- #include <math.h>
- #include <time.h>
- void vorm_vector(int nn, int vect_max, int vect_min, int vect[nn]);
- void bubble_sort (int nn, int vector[nn]);
- void sheiker_sort(int nn, int vector[nn]);
- int main()
- {
- int i, vector_min, vector_max, n ;
- printf("\n**** please enter ****");
- printf("\n");
- printf("\n min=");
- scanf("%d", &vector_min);
- printf("\n max=");
- scanf("%d", &vector_max);
- printf("\n n=");
- scanf("%d", &n);
- printf("\n");
- int vector[n];
- vorm_vector(n, vector_max, vector_min, vector);
- printf("\nOriginal vector:\n");
- for(i = 0; i < n; i++)
- printf(" %4d", vector[i]);
- printf("\n");
- bubble_sort (n, vector);
- printf("\nBubble sort:\n");
- for(i = 0; i<n; i++)
- printf(" %4d", vector[i]);
- printf("\n");
- sheiker_sort (n, vector);
- printf("\nSheiker sort:\n");
- for(i = 0; i<n; i++)
- printf(" %4d", vector[i]);
- printf("\n");
- return 0;
- }
- void vorm_vector(int nn, int vect_max, int vect_min, int vect[nn])
- {
- int i, m;
- time_t t; // текущее время для инициализации
- // генератора случайных чисел
- srand((unsigned) time(&t)); // инициализация генератора
- // случайных чисел
- m = vect_max-vect_min + 1;
- // получение случайного числа в диапазоне
- // от vector_min до vector_max
- for (i=0; i<nn; i++)
- vect[i]=rand()% m + vect_min;
- }
- // 2. Сортировка пузырьком
- void bubble_sort(int nn, int vect[nn])
- {
- int i, m, temp;
- for (m=nn-2; m>=0 ;m--)
- for (i=0; i<=m ;i++)
- if (vect[i] > vect[i+1])
- {
- temp = vect[i];
- vect[i] = vect[i+1];
- vect[i+1]= temp;
- }
- }
- // 3. Шейкерная сортировка
- void sheiker_sort(int nn, int vect[nn])
- {
- int l, r, i, k, temp;
- k = l = 0;
- r = nn - 2;
- while(l <= r)
- {
- for(i = l; i <= r; i++)
- if (vect[i] > vect[i+1])
- {
- temp = vect[i];
- vect[i] = vect[i+1];
- vect[i+1] = temp;
- k = i;
- }
- r = k - 1;
- for(i = r; i >= l; i--)
- if (vect[i] > vect[i+1])
- {
- temp = vect[i];
- vect[i] = vect[i+1];
- vect[i+1] = temp;
- k = i;
- }
- l = k + 1;
- }
- }
- [size="1"][color="grey"][I]Добавлено через 3 минуты[/I][/color][/size]
- Это сортировка Хоара
- #include <stdio.h>
- #include <math.h>
- #include <conio.h>
- #include <locale.h>
- #define N 256
- int a[N];
- void qsort(int l, int r)
- {
- int w,x,i,j;
- i=l;
- j=r;
- x=a[(l+r)/2];
- while (i<=j)
- {
- while (a[i]<x) i++;
- while (x<a[j]) j--;
- if (i<=j)
- {
- w=a[i]; a[i]=a[j]; a[j]=w;
- i++; j--;
- }
- }
- if (l<j) qsort(l,j);
- if (i<r) qsort(i,r);
- }
- void main()
- {
- int i,n;
- srand((unsigned) time(NULL));
- printf("Enter N: "); scanf("%d", &n);
- for (i=0; i<n; i++)
- {
- a[i]=1+rand()%n;
- printf("%d ", a[i]);
- }
- printf("\n");
- qsort(0,n-1);
- for (i=0; i<n; i++)
- {
- printf("%d ", a[i]);
- }
- printf("\n");
- }
Решение задачи: «Сортировка векторов методами: пузырька, Хоара, Шейкерная сортировка»
textual
Листинг программы
- #include <stdio.h>
- #define N 10
- int a[N] = {5,2,6,0,11,7,6,7,4,2};
- int sort(int *a, int last)
- {
- int t=0;
- for (int i=0; i<last; i++)
- {
- if (a[i] > a[last])
- {
- t=a[i];
- a[i] = a[last];
- a[last] = t;
- }
- }
- if (last > 1)
- {
- last--;
- sort(a,last);
- }
- else return 0;
- }
- int main()
- {
- sort(a,N-1);
- for (int i=0; i<N; i++) printf ("%d ",a[i]);
- return 0;
- }
Объяснение кода листинга программы
- Подключение стандартной библиотеки для работы с консолью (stdio.h).
- Определение массива a с фиксированным размером N = 10 и инициализация его значениями.
- Объявление функции sort, которая принимает указатель на массив и индекс последнего элемента для сортировки.
- Передача в функцию sort указателя на массив a и значение N-1 (так как последний элемент не нужно сортировать).
- Вывод отсортированного массива в консоль.
- Возврат 0 функцией main, что означает корректное завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д