Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11678
Последний выпуск: 19.06.2015

Сортировка выбором

62K
20 мая 2016 года
Nas_96
19 / / 13.03.2016
Считать все записи из файла "8.dat". Для чтения каждой отдельной записи осуществите динамический захват памяти. Предполагается, что к-во записей в файле заранее неизвестно.

Выполните сортировку записей различным ключам:

· номенклатурный номер (по возрастанию);

· стоимость товара (по убыванию);

· к-во на складе (по убыванию).

Используйте сортировка выбором

Всего сортировка будет выполнена 12 раз, каждый раз сортируется массив в первоначальном состоянии.

Для каждого случая подсчитайте к-во сравнений и перестановок.

Оцените скорость, естественность и устойчивость каждого алгоритма.

Этот код используется сортировку вставками. Мне нужно использовать сортировку выбором. Как сделать его с помощью сортировки выбором?

Помогите, пожалуйста.
Код:
#include <iostream>
#include <fstream>
#include <conio.h>

using namespace std;

struct PRICE  
{
    int number;
    char name[20];
    int cost;
    int quantity;
} *pm;

int Menu();
void PrintPRICE(PRICE);
void sort_cost(PRICE*, int);
void sort_quantity(PRICE*, int);

long file_size(const char*);

int main()
{
    int count = 0;
    const char *fname = "D:8.dat";

    FILE* file = fopen(fname, "r");
    if (file != NULL)
    {
        long size = file_size(fname);
        count = size / sizeof PRICE;
        pm = new PRICE[count];
        fread(pm, sizeof PRICE, count, file);
        fclose(file);
    }

    for (int i=0; i<count; i++)
    {
        PrintPRICE(pm[i]);
        cout << endl;
    }

    int ch = Menu();

    switch (ch)
    {
    case 1:
        {
            sort_cost(pm, count);
            cout << endl;
            cout << " Result: " << endl;
            cout << "-----------------------" << endl;
            for (int i=0; i<count; i++)
            {
                PrintPRICE(pm[i]);
                cout << endl;
            }
            break;
        }
    case 2:
        {
            sort_quantity(pm, count);
            cout << " Result: " << endl;
            cout << "-----------------------" << endl;
            for (int i=0; i<count; i++)
            {
                PrintPRICE(pm[i]);
                cout << endl;
            }
            break;
        }
    default: break;
    }

    delete [] pm;
    _getch();
}

void PrintPRICE(PRICE price)
{
    cout << " Product: " << price.name << endl;
    cout << " Number of orden: " << price.number << endl;
    cout << " Product cost: " << price.cost << endl;
    cout << " Quantity in stock: " << price.quantity << endl;
    cout << "-----------------------------------n" << endl;
}

long file_size(const char* filename)
{
    FILE *Pfile = NULL;
    Pfile = fopen(filename, "rb");
    fseek(Pfile, 0, SEEK_END);
    long size = ftell(Pfile);
    fclose(Pfile);
    return size;
}

void sort_cost(PRICE* array, int count)
{
    int change = 0;
    int comparesion = 0;
    for (int i=1; i<count; i++)
    {
        PRICE key = array[i];
        int j = i - 1;
        comparesion++;

        while (i>=0 && array[i].cost>key.cost)
        {
            array[j + 1] = array[j];
            j = j - 1;
            change++;
        }
        array[j + 1] = key;
    }
    cout << "n Quantity change: " << change << endl;
    cout << " Quantity comparesion: " << comparesion << endl;
}

void sort_quantity(PRICE* array, int count)
{
    int change = 0;
    int comparesion = 0;
    for (int i=1; i<count; i++)
    {
        PRICE key = array[i];
        int j = i - 1;
        comparesion++;
        while (j>=0 && array[i].quantity>key.quantity)
        {
            array[j + 1] = array[j];
            j = j - 1;
            change++;
        }
        array[j + 1] = array[j];
    }
    cout << "n Quantity change: " << change << endl;
    cout << " Quantity comparesion: " << comparesion << endl;
}

int Menu()
{
    int n;
    cout << " 1 - Sort by cost" << endl;
    cout << " 2 - Sort by quantity" << endl;
    cout << "n Your choice: "; cin >> n;
    return n;
}

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог