Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
bartle
0 / 0 / 1
Регистрация: 11.02.2015
Сообщений: 59
1

Исправить сортировку подсчетом

10.04.2017, 12:17. Просмотров 833. Ответов 4
Метки нет (Все метки)

Всем привет!
Есть программа сортировки подсчетом
C++ (Qt)
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
#include <fstream>
#include <iostream>
using namespace std;
 
 
int a[100];
int c[100];
 
int main() {
 
    int k = 100;
setlocale(LC_ALL, "RUSSIAN");
 
//Создаем файловый поток и связываем его с файлом
ifstream in("input.txt");
 
if (in.is_open())
{
//Если открытие файла прошло успешно
 
//Вначале посчитаем сколько чисел в файле
int count = 0;// число чисел в файле
int temp;//Временная переменная
 
while (!in.eof())// пробегаем пока не встретим конец файла eof
{
in >> temp;//в пустоту считываем из файла числа
count++;// увеличиваем счетчик числа чисел
}
 
//Число чисел посчитано, теперь нам нужно понять сколько
//чисел в одной строке
//Для этого посчитаем число пробелов до знака перевода на новую строку
 
//Вначале переведем каретку в потоке в начало файла
in.seekg(0, ios::beg);
in.clear();
 
//Число пробелов в первой строчке вначале равно 0
int count_space = 0;
char symbol;
while (!in.eof())//на всякий случай цикл ограничиваем концом файла
{
//теперь нам нужно считывать не числа, а посимвольно считывать данные
in.get(symbol);//считали текущий символ
if (symbol == ' ') count_space++;//Если это пробел, то число пробелов увеличиваем
if (symbol == '\n') break;//Если дошли до конца строки, то выходим из цикла
}
//cout << count_space << endl;
 
//Опять переходим в потоке в начало файла
in.seekg(0, ios::beg);
in.clear();
 
//Теперь мы знаем сколько чисел в файле и сколько пробелов в первой строке.
//Теперь можем считать матрицу.
 
int n = count / (count_space + 1);//число строк
int m = count_space + 1;//число столбцов на единицу больше числа пробелов
double **x;
x = new double*[n];
for (int i = 0; i<n; i++) x[i] = new double[m];
 
//Считаем матрицу из файла
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
in >> x[i][j];
 
//Выведем матрицу
for (int i = 0; i < n; i++) {
 
 
 
 
for (int j = 0; j < m; j++) {
 
 
    //cout << x[i][j] << "\t";
    a[j] = x[i][j];
 
 
 
}
    //строим массив с
    for(int iu = 0; iu < m; iu++)  {
      c[a[iu]]++;
    }
    //бежимся по всему отрезку
        //с 0 до k-1
    for(int it = 0; it < k; it++)  {
            //выводим i c[i] раз
            for(int jt = 0; jt < c[it]; jt++) {
                cout<<it<<" \t";
                c[it] = '\0';
            }
    }
 
 
cout << "\n";
 
}
 
for (int i = 0; i<n; i++) delete[] x[i];
delete[] x;
 
in.close();//под конец закроем файла
}
else
{
//Если открытие файла прошло не успешно
cout << "Файл не найден.";
}
 
return 0;
}
Проблема в том, что при дублировании цифр они пропадают
Например:

на входном файле

77 4 2 4 7 6 55 4

3 5 74 6 1 6 1 6

5 57 7 4 8 6 51 8

2 15 0 2 1 8 25 4

выводит

2 4 6 7 55 77

1 3 5 6 74

4 5 6 7 8 51 57

0 1 2 4 8 15 25

а должна выводить

2 4 4 4 6 7 55 77

1 1 3 5 6 6 6 74

и т.д.

Помогите исправить пожалуйста!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2017, 12:17
Ответы с готовыми решениями:

Сравнить сортировку пузырьком с сортировкой подсчетом
Нужно написать который бы сравнивал сортировку пузырьком с сортировкой...

Исправить сортировку
Разработать программу учета посадок на участке в ботаническом саду. Данные...

Исправить сортировку структуры
#pragma hdrstop #pragma argsused #include &lt;tchar.h&gt; #include &lt;stdio.h&gt;...

Сортировку вставками меняем на Пирамидальную сортировку и на Сортировку подсчётом
Здравствуйте. Я не как не могу разобраться.Помогите. У меня есть листинг...

Подскажите как эту сортировку переделать в сортировку по алфавиту?
Подскажите как эту сортировку переделать в сортировку по алфавиту?? ...

4
Даценд
Модератор
Эксперт .NET
4203 / 3968 / 2626
Регистрация: 20.04.2015
Сообщений: 7,206
10.04.2017, 12:30 2
bartle,
C++
1
2
3
4
5
6
7
    for(int it = 0; it < k; it++)  {
            //выводим i c[i] раз
            for(int jt = 0; jt < c[it]; jt++) {
                cout<<it<<" \t";
            }
            c[it] = '\0'; //выносим из вложенного цикла
    }
0
bartle
0 / 0 / 1
Регистрация: 11.02.2015
Сообщений: 59
10.04.2017, 12:45  [ТС] 3
Даценд, я не понял. Вы написали кусок моей программы, могли бы пояснить или исправить...
0
Даценд
Модератор
Эксперт .NET
4203 / 3968 / 2626
Регистрация: 20.04.2015
Сообщений: 7,206
10.04.2017, 12:49 4
Лучший ответ Сообщение было отмечено bartle как решение

Решение

Цитата Сообщение от bartle Посмотреть сообщение
Вы написали кусок моей программы, могли бы пояснить или исправить...
Если присмотреться, то это уже исправленный вариант с пояснениями в комментарии
1
bartle
0 / 0 / 1
Регистрация: 11.02.2015
Сообщений: 59
10.04.2017, 13:10  [ТС] 5
Даценд, спасибо
0
10.04.2017, 13:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2017, 13:10

Сортировку вставками меняем на сортировку слиянием
Код программы выполняет сортировку массива вставками. Как сюда вставить код...

Сортировка подсчетом с++
Всем привет. Есть такая проблемка. vs2010 выдает &quot;Прекращена работа программы&quot;....

Сортировка подсчетом
Доброго времени суток. Написал код, вот только выдает ошибку: error C2061:...


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

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

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