Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Нас_96
0 / 0 / 3
Регистрация: 12.03.2016
Сообщений: 105
1

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

21.05.2016, 20:21. Просмотров 103. Ответов 0
Метки нет (Все метки)

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

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

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

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

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

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

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

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

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

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

Помогите, пожалуйста.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2016, 20:21
Ответы с готовыми решениями:

сортировка выбором
помогите пожалуйста, алгоритм не работает то есть не сортирует #ifndef FUNC #define FUNC...

Сортировка выбором
Что не так с сортировкой простого выбора????((( #include &lt;iostream&gt; using namespace std; ...

Сортировка выбором
Выбираeтся минимaльный элeмeнт в мaссивe и пeрeнoсится в нoвый массив. 3aтем нa его местo...

Сортировка выбором
Сортировка выбором. Дана последовательность чисел а1, а2,..., аn. Требуется переставить элементы...

Сортировка выбором
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;cstdlib&gt; using namespace...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2016, 20:21

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

Сортировка выбором на с++
Сортировка выбором. Выбрать минимальный элемент в массиве, перенести в выходной массив на...

Сортировка выбором
Разбираю сортировку выбором. Как реализовать сортировку по возрастанию понял, а как реализовать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru