Файл: «Сортировка данных в массиве. Оценка эффективности метода».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);

}