Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2012, 00:25   #1
Forgotten
 
Регистрация: 23.10.2011
Сообщений: 8
Сообщение quicksort на Си

Есть программа сортирующая вводимый массив студентов первая сортировка бульбашками, подскажите пожалуйста как сюда дописать 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;
}
Forgotten вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
QUICKSORT Оксанкая Помощь студентам 0 01.05.2012 22:30
Программа сортировки quicksort Olya90 Помощь студентам 0 01.06.2010 00:12
quicksort списка SpineDuzt Паскаль, Turbo Pascal, PascalABC.NET 5 12.04.2010 10:24
не работает quicksort SpineDuzt Помощь студентам 2 20.03.2010 16:05
quicksort bfm89 Общие вопросы C/C++ 2 23.11.2009 22:19