Файл: «Сортировка данных в массиве. Оценка эффективности метода».pdf
Добавлен: 29.02.2024
Просмотров: 54
Скачиваний: 0
(*f[choice-1])();
Вывод
“Ошибка”
FOR
, ;
scanf("%d", &c)==0
Вывод
“Ошибка”
fflush(stdin);
продолжение схемы алгоритма основной процедуры
A
B
break
FOR
FOR
КОНЕЦ
НАЧАЛО
Ввод
“Меню”
КОНЕЦ
Текст задачи.
Сортировка подсчетом для целых чисел (от меньшего к большему).
Сортировка подсчетом для целых чисел (от большего к меньшему).
Сортировка подсчетом для букв (по алфавиту).
Сортировка подсчетом для букв (в обратном порядке).
Выход.
схема алгоритма процедуры Menu
B
продолжение схемы алгоритма основной процедуры
НАЧАЛО
Ввод
i, j, n, a, b, *A, *C, maxC, minC
FOR
, ;
scanf("%d", &n)==0
Вывод
“Ошибка”
fflush(stdin)
FOR
break
схема алгоритма процедуры ForIntegerFromMinToMax
C
FOR
, ;
scanf("%d", &a)==0
Вывод
“Ошибка”
fflush(stdin)
break
FOR
, ;
scanf("%d", &b)==0
Вывод
“Ошибка”
fflush(stdin)
break
FOR
FOR
продолжение схемы алгоритма процедуры ForIntegerFromMinToMax
C
D
D
F
A=(int *)malloc(n*sizeof(int));
FOR
0, n; 1
A[i]=rand()%(b+1-a)+a;
Вывод
A[i]
FOR
maxC=A[0];
minC=A[0];
maxC<A[i]
maxC=A[i];
FOR
0, n; 1
minC>A[i]
minC=A[i];
FOR
Рпродолжение схемы алгоритма процедуры ForIntegerFromMinToMax
F
G
G
H
C=(int *)calloc(maxC-minC+1,sizeof(int));
FOR
0, n; 1
C[A[i]-minC]++;
FOR
FOR
0, maxC-minC+1; 1
FOR
0, C[i]; 1
Вывод
i+minC
FOR
FOR
free(C);
free(A);
КОНЕЦ
продолжение схемы алгоритма процедуры ForIntegerFromMinToMax
H
I
I
НАЧАЛО
Ввод
i, j, n, a, b, *A, *C, maxC, minC
FOR
, ;
scanf("%d", &n)==0
Вывод
“Ошибка”
fflush(stdin)
FOR
break
схема алгоритма процедуры ForIntegerFromMaxToMin
J
FOR
, ;
scanf("%d", &a)==0
Вывод
“Ошибка”
fflush(stdin)
break
FOR
, ;
scanf("%d", &b)==0
Вывод
“Ошибка”
fflush(stdin)
break
FOR
FOR
продолжение схемы алгоритма процедуры ForIntegerFromMaxToMin
J
K
K
L
A=(int *)malloc(n*sizeof(int));
FOR
0, n; 1
A[i]=rand()%(b+1-a)+a;
Вывод
A[i]
FOR
maxC=A[0];
minC=A[0];
maxC<A[i]
maxC=A[i];
FOR
0, n; 1
minC>A[i]
minC=A[i];
FOR
продолжение схемы алгоритма процедуры ForIntegerFromMaxToMin
L
M
M
N
C=(int *)calloc(maxC-minC+1,sizeof(int));
FOR
0, n; 1
C[A[i]-minC]++;
FOR
FOR
maxC-minC, 0; 1
FOR
0, C[i]; 1
Вывод
i+minC
FOR
FOR
free(C);
free(A);
КОНЕЦ
продолжение схемы алгоритма процедуры ForIntegerFromMaxToMin
N
O
O
НАЧАЛО
Ввод
i, j, n, a, b, *A, *C, maxC, minC
FOR
, ;
scanf("%d", &n)==0
Вывод
“Ошибка”
fflush(stdin)
FOR
break
схема алгоритма процедуры ForSymbolsFromMinToMax
P
FOR
, ;
scanf("%d", &a)==0
Вывод
“Ошибка”
fflush(stdin)
break
FOR
, ;
scanf("%d", &b)==0
Вывод
“Ошибка”
fflush(stdin)
break
FOR
FOR
продолжение схемы алгоритма процедуры ForSymbolsFromMinToMax
P
Q
Q
R
A=(char *)malloc(n*sizeof(char));
FOR
0, n; 1
A[i]=rand()%(char(b)+1-char(a))+char(a);
Вывод
A[i]
FOR
maxC=(int)A[0];
minC=(int)A[0];
maxC<A[i]
maxC=A[i];
FOR
0, n; 1
minC>A[i]
minC=A[i];
FOR
продолжение схемы алгоритма процедуры ForSymbolsFromMinToMax
R
S
S
T
C=(int *)calloc(maxC-minC+1,sizeof(int));
FOR
0, n; 1
C[(int)A[i]-minC]++;
FOR
FOR
0, maxC-minC+1; 1
FOR
0, C[i]; 1
Вывод
char(i+minC)
FOR
FOR
free(C);
free(A);
КОНЕЦ
продолжение схемы алгоритма процедуры ForSymbolsFromMinToMax
T
U
U
НАЧАЛО
Ввод
i, j, n, a, b, *A, *C, maxC, minC
FOR
, ;
scanf("%d", &n)==0
Вывод
“Ошибка”
fflush(stdin)
FOR
break
схема алгоритма процедуры ForSymbolsFromMaxToMin
V
FOR
, ;
scanf("%d", &a)==0
Вывод
“Ошибка”
fflush(stdin)
break
FOR
, ;
scanf("%d", &b)==0
Вывод
“Ошибка”
fflush(stdin)
break
FOR
FOR
продолжение схемы алгоритма процедуры ForSymbolsFromMaxToMin
V
W
W
X
A=(char *)malloc(n*sizeof(char));
FOR
0, n; 1
A[i]=rand()%(char(b)+1-char(a))+char(a);
Вывод
A[i]
FOR
maxC=(int)A[0];
minC=(int)A[0];
maxC<A[i]
maxC=A[i];
FOR
0, n; 1
minC>A[i]
minC=A[i];
FOR
продолжение схемы алгоритма процедуры ForSymbolsFromMaxToMin
X
Y
Y
Z
C=(int *)calloc(maxC-minC+1,sizeof(int));
FOR
0, n; 1
C[(int)A[i]-minC]++;
FOR
FOR
maxC-minC, 0; 1
FOR
0, C[i]; 1
Вывод
char(i+minC)
FOR
FOR
free(C);
free(A);
КОНЕЦ
продолжение схемы алгоритма процедуры ForSymbolsFromMaxToMin
Z
1
1
НАЧАЛО
КОНЕЦ
exit(0);
схема алгоритма процедуры exit
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void Menu();
void ForIntegerFromMinToMax();
void ForIntegerFromMaxToMin();
void ForSymbolsFromMinToMax();
void ForSymbolsFromMaxToMin();
void Exit();
int main(){
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
void (*f[6]) () = {Menu, ForIntegerFromMinToMax, ForIntegerFromMaxToMin, ForSymbolsFromMinToMax, ForSymbolsFromMaxToMin, Exit};
int choice;//переменная для выбора пункта меню
printf("_____\nМеню.\n1: Текст задачи\n");
printf("2: Сортировка подсчетом для целых чисел (от меньшего к большему)\n");
printf("3: Сортировка подсчетом для целых чисел (от большего к меньшему)\n");
printf("4: Сортировка подсчетом для букв (по алфавиту)\n");
printf("5: Сортировка подсчетом для букв (в обратном порядке)\n");
printf("6: Выход\n_____\n");
printf("\nВведите число от 1 до 6 включительно, выбрав пункт меню: ");
for( ; ; ){
if(scanf("%d", &choice)==0){
printf("\n\n\aОшибка! Неправильный тип данных.\nПожалуйста, введите число от 1 до 6 включительно: ");
fflush(stdin);
}
else break;
}
for( ; ; ){
if(choice>0 && choice<7){
(*f[choice-1])();
printf("\nВведите число от 1 до 6 включительно, выбрав пункт меню: ");
}
else
printf("\n\n\aТакого пункта меню не существует!\nВведите число от 1 до 6 включительно, выбрав пункт меню: ");
for( ; ; ){
if(scanf("%d", &choice)==0){
printf("\n\n\aОшибка! Неправильный тип данных.\nПожалуйста, введите число от 1 до 6 включительно: ");
fflush(stdin);
}
else break;
}
}
return 0;
}
void Menu(){
printf("Написать программу сортировки методом подсчета различных типов данных.\n");
printf("_____\nМеню.\n1: Текст задачи\n");
printf("2: Сортировка подсчетом для целых чисел (от меньшего к большему)\n");
printf("3: Сортировка подсчетом для целых чисел (от большего к меньшему)\n");
printf("4: Сортировка подсчетом для букв (по алфавиту)\n");
printf("5: Сортировка подсчетом для букв (в обратном порядке)\n");
printf("6: Выход\n_____\n");
}
void ForIntegerFromMinToMax(){
int i, j, n, a, b;
int *A, *C;
int maxC, minC;
printf("Введите размер массива: \t");
for( ; ; ){
if(scanf("%d", &n)==0){
printf("\n\n\aОшибка! Неправильный тип данных.\nПожалуйста, введите размер массива заново: ");
fflush(stdin);
}
else break;
}
printf("Введите левую границу диапазона сортировки: \t");
for( ; ; ){
if(scanf("%d", &a)==0){
printf("\n\n\aОшибка! Неправильный тип данных.\nПожалуйста, введите левую границу диапазона сортировки заново: ");
fflush(stdin);
}
else break;
}
printf("Введите правую границу диапазона сортировки: \t");
for( ; ; ){
if(scanf("%d", &b)==0){
printf("\n\n\aОшибка! Неправильный тип данных.\nПожалуйста, введите правую границу диапазона сортировки заново: ");
fflush(stdin);
}
else break;
}
A=(int *)malloc(n*sizeof(int));
printf("Исходный массив: \t");
for(i=0; i<n; i++){
A[i]=rand()%(b+1-a)+a;
printf("%d\t", A[i]);
}
printf("\n");
maxC=A[0];
minC=A[0];
for(i=1; i<n; i++){
if(maxC<A[i])
maxC=A[i];
if(minC>A[i])
minC=A[i];
}
C=(int *)calloc(maxC-minC+1,sizeof(int));
for(i=0; i<n; i++){
C[A[i]-minC]++;
}
//Вывод от меньшего к большему
printf("Результат: \t");
for(i=0; i<maxC-minC+1; i++){
for(j=0; j<C[i]; j++){
printf("%d\t", i+minC);
}
}
printf("\n\n");
free(C);
free(A);
}
void ForIntegerFromMaxToMin(){
int i, j, n, a, b;
int *A, *C;
int maxC, minC;
printf("Введите размер массива: \t");
for( ; ; ){
if(scanf("%d", &n)==0){
printf("\n\n\aОшибка! Неправильный тип данных.\nПожалуйста, введите размер массива заново: ");
fflush(stdin);
}
else break;
}
printf("Введите левую границу диапазона сортировки: \t");
for( ; ; ){
if(scanf("%d", &a)==0){
printf("\n\n\aОшибка! Неправильный тип данных.\nПожалуйста, введите левую границу диапазона сортировки заново: ");
fflush(stdin);
}
else break;
}
printf("Введите правую границу диапазона сортировки: \t");
for( ; ; ){
if(scanf("%d", &b)==0){
printf("\n\n\aОшибка! Неправильный тип данных.\nПожалуйста, введите правую границу диапазона сортировки заново: ");
fflush(stdin);
}
else break;
}
A=(int *)malloc(n*sizeof(int));
printf("Исходный массив: \t");
for(i=0; i<n; i++){
A[i]=rand()%(b+1-a)+a;
printf("%d\t", A[i]);
}
printf("\n");
maxC=A[0];
minC=A[0];
for(i=1; i<n; i++){
if(maxC<A[i])
maxC=A[i];
if(minC>A[i])
minC=A[i];
}
C=(int *)calloc(maxC-minC+1,sizeof(int));
for(i=0; i<n; i++){
C[A[i]-minC]++;
}
printf("Результат: \t");
//Вывод в от большего к меньшему
for(i=maxC-minC; i>=0; i--){
for(j=0; j<C[i]; j++){
printf("%d\t", i+minC);
}
}
printf("\n\n");
free(C);
free(A);
}
void ForSymbolsFromMinToMax(){
int i, j, n, a, b;
int *C;
char *A;
int maxC, minC;
printf("Введите размер массива: \t");
for( ; ; ){
if(scanf("%d", &n)==0){
printf("\n\n\aОшибка! Неправильный тип данных.\nПожалуйста, введите размер массива заново: ");
fflush(stdin);
}
else break;
}
printf("Введите левую границу диапазона сортировки: \t");
for( ; ; ){
if(scanf("%d", &a)==0){
printf("\n\n\aОшибка! Неправильный тип данных.\nПожалуйста, введите левую границу диапазона сортировки заново: ");
fflush(stdin);
}
else break;
}
printf("Введите правую границу диапазона сортировки: \t");
for( ; ; ){
if(scanf("%d", &b)==0){
printf("\n\n\aОшибка! Неправильный тип данных.\nПожалуйста, введите правую границу диапазона сортировки заново: ");
fflush(stdin);
}
else break;
}
A=(char *)malloc(n*sizeof(char));
printf("Исходный массив: \t");
for(i=0; i<n; i++){
A[i]=rand()%(char(b)+1-char(a))+char(a);
cout << A[i] << "\t";
}
printf("\n");
maxC=(int)A[0];
minC=(int)A[0];
for(i=1; i<n; i++){
if(maxC<A[i])
maxC=A[i];
if(minC>A[i])
minC=A[i];
}
C=(int *)calloc(maxC-minC+1,sizeof(int));
for(i=0; i<n; i++){
C[(int)A[i]-minC]++;
}
printf("Результат: \t");
//Вывод от меньшего к большему
for(i=0; i<maxC-minC+1; i++){
for(j=0; j<C[i]; j++){
cout << char(i+minC) << "\t";
}
}
printf("\n\n");
free(C);
free(A);
}
void ForSymbolsFromMaxToMin(){
int i, j, n, a, b;
int *C;
char *A;
int maxC, minC;
printf("Введите размер массива: \t");
for( ; ; ){
if(scanf("%d", &n)==0){
printf("\n\n\aОшибка! Неправильный тип данных.\nПожалуйста, введите размер массива заново: ");
fflush(stdin);
}
else break;
}
printf("Введите левую границу диапазона сортировки: \t");
for( ; ; ){
if(scanf("%d", &a)==0){
printf("\n\n\aОшибка! Неправильный тип данных.\nПожалуйста, введите левую границу диапазона сортировки заново: ");
fflush(stdin);
}