Есть программа сортирующая вводимый массив студентов первая сортировка бульбашками, подскажите пожалуйста как сюда дописать quicksort, после пары попыток опустились руки...( поле сортировки не имеет значение (важно только наличие qсорта) Буду очень благодарен
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
// Структура для студента
struct Student
{
char date[11]; // Дата рождения
char univer[30]; // Название учебного заведения
float mark; // Средний балл последней сессии
};
const int N_MAX = 100; // Максимальное количество студентов
Student mas[N_MAX]; // Массив студентов
int n; // Количество студентов
// Сортирует массив по возрастанию методом пузырька
void BubbleSort()
{
for (int i = 1; i <= n - 1; i++)
for (int j = 0; j < n - i; j++)
if (strcmp(mas[j].univer, mas[j + 1].univer) > 0) {
Student tmp = mas[j]; // Переставляем в массиве информацию о двух студентах (копируем структуры)
mas[j] = mas[j + 1];
mas[j + 1] = tmp;
}
}
/* Метод "балансировки" пирамиды (просеивания, добавления элементов)
n - количество элементов
k - индекс добавляемого/просеиваемого элемента */
void Screening(int k, int n)
{
// Это чтобы при k = 0 и n = 0 не делалось лишней перестановки
if (n == 0)
return;
int childPos;
Student tmp = mas[k]; // Вспомогательная переменная
while (k <= n / 2) {
childPos = 2 * k; // Левый ребенок элемента k
// Выбираем большего ребенка элемента k из 2-х: либо левый, либо правый
if (childPos < n && mas[childPos].mark < mas[childPos + 1].mark)
childPos++;
/* Если родитель mas[k] больше всех своих детей,
то ничего не делаем, он стоит на правильном месте */
if (tmp.mark >= mas[childPos].mark)
break;
// Иначе - меняем mas[k] с наибольшим ребенком
mas[k] = mas[childPos];
k = childPos;
}
mas[k] = tmp;
}
// Сортирует массив по возрастанию методом пирамидальной сортировки
void PyramSort()
{
int i;
// Строим пирамиду
for (i = n / 2; i >= 0; i--)
Screening(i, n - 1);
/* Формируем конечную отсортированную последовательность +
"балансируем" пирамиду */
for (i = n - 1; i > 0; i--) {
// Меняем первый с последним
Student tmp = mas[0];
mas[0] = mas[i];
mas[i] = tmp;
// Восстанавливаем баланс для пирамиды mas[0..i - 2]
Screening(0, i - 1);
}
}
int main()
{
clrscr(); // Очищаем экран
cout << "Введите количество студентов: ";
cin >> n;
for (int i = 0; i < n; i++) { // Вводим информацию обо всех студентах
cout << "Студент " << i + 1 << ":\n";
cout << "Дата рождения: ";
gets(mas[i].date);
cout << "Название учебного заведения: ";
gets(mas[i].univer);
cout << "Средний балл последней сессии: ";
cin >> mas[i].mark;
}
BubbleSort();
cout << "После сортировки по названию учебного заведения методом пузырька:\n";
for (i = 0; i < n; i++) // Выводим информацию обо всех студентах
cout << mas[i].date << " " << mas[i].univer << " " << mas[i].mark << "\n";
PyramSort();
cout << "После сортировки по среднему баллу последней сессии методом пирамиды:\n";
for (i = 0; i < n; i++) // Выводим информацию обо всех студентах
cout << mas[i].date << " " << mas[i].univer << " " << mas[i].mark << "\n";
getch();
return 0;
}