• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Сортировка массивов на языке СИ

  • Автор темы maximka21
  • Дата начала
M

maximka21

Дана последовательность ,расположить ее ненулевые элементы по убыванию.на языке СИ,не важно откуда вводить данные,можно с клавиатуры,можно и сразу в программе.Решите пожалуйста,кому это не очень трудно
 
R

RiCrO

Дана последовательность ,расположить ее ненулевые элементы по убыванию.на языке СИ,не важно откуда вводить данные,можно с клавиатуры,можно и сразу в программе.Решите пожалуйста,кому это не очень трудно


Уважаемый автор. Вы случаем с дядей S'меловым Т'арасом L'еонидовичем и его алгоритмом не знакомы?... Могу познакомить :ithx:


Добавлено: "Покапался" у себя в архиве листингов и наткнулся на мой старенький проектик. Как раз сортировки с моего первого курса.

maximka21, пользуйся. Препаду очень понравиться. Главное не забудь разобраться и учесть тот факт, что у меня условие "ненулевые" элементы не выполняются. Как этого избежать? Подумай сам. Изменить один символ :)

Внимание! Когда будешь переносить всё в свой проект, перед ====\n"; и ||||\n"; жми Backspace. Выравнивай...


Main.cpp

C++:
#include "stdafx.h"
#include "string.h"
#include <iostream>
#include "sort.h"
#include <time.h>
#include <conio.h>
#include "memory.h"
#include <locale>
#include <Windows.h>
using namespace std;


#define BEGIN 100 // Начальное значение количества элементов для генерации.
#define ABSOLUT 200 // Абсолютное значение - максимум элементов для генерации.

int _tmain(int argc, _TCHAR* argv[])
{ 

setlocale(LC_ALL,"rus");
cout << endl;
cout << "		 < Методы Сортировок > - Copyright(2009) RiCrO(r) \n\n";

cout << "============================================================================
====\n"; // Перед этими символами жми Backspace
cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||\n"; / Перед этими символами жми Backspace
cout << "============================================================================
====\n";

cout << " Пожалуйста, подождите. Идёт загрузка";

Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500);

cout << endl;
cout << endl;

cout << " Данная программа не предназначена для вывода большого количества элементов для сортировки.\n\n";
cout << " Поэтому рекомендуем ввести меньшее количество элементов для сортировки или же \n выключить вывод этих элементов на экран.";

Sleep(6000);

cout << endl;
cout << endl;
cout << "============================================================================
====\n";
cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||\n";
cout << "============================================================================
====\n";
int k[ABSOLUT], f[ABSOLUT];
char Offnumbers;
char Lastchance;

clock_t t1, t2;
GetRandKey (1);

cout << " Параметры: \n\n";
cout << "============================================================================
====\n";
cout << " Начальное значение для генерации: "<< BEGIN << " чисел.\n";
cout << " Абсолютное значение - максимум для генерации: "<< ABSOLUT << " чисел.\n\n";
cout << "============================================================================
====\n";

Sleep(2000);

if ( BEGIN > 1000 ) { cout << " ВНИМАНИЕ! Задано высокое начальное значение для генерации!\n Не рекомендуем включать операцию вывода на экран!";}
if ( BEGIN < 1000 ) { cout << " Операцию вывода на экран можно активировать.";}
cout << endl;
cout << endl;
cout << "============================================================================
====\n";
cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||\n";
cout << "============================================================================
====\n";

Sleep(2000);

cout << endl;
cout << " Нажмите <Y> или <y>, если вы хотите просмотреть сгенерированные числа. \n Нажмите <N> или <n>, если хотите просмотреть только результат замера времени	работы цикла.\n\n\n";
cout << " Ваш выбор: ";
cin >> Offnumbers;
cout << endl;
if((Offnumbers == 'Y')||(Offnumbers == 'y'))
{ 
cout <<" Операция вывода на экран сгенерированных чисел: Включена пользователем.";
cout << endl;
cout << endl;
Sleep(2000);
cout <<" Подтверждение: ";
cin >> Lastchance;
cout << endl;
Sleep(2000);

if(BEGIN > 1000)

{
cout << "============================================================================
====\n";
cout <<" ВНИМАНИЕ! Операция вывода на экран сгенерированных чисел включена!. \n\n Активация этой операции может привести к зависанию компьютера или другим		нежелательным последствиям которые могут привести к ошибке работы операционной системы!\n\n Вы уверены что хотите оставить эту функцию включённой?";
cout << endl;
cout << " Ваш выбор: ";
cin >> Lastchance;
cout << endl;
cout << "============================================================================
====\n";
}
if((Lastchance == 'Y')||(Lastchance == 'y')) {
Sleep(1000);
cout << " Пожалуйста, подождите. Идёт активация операций";
Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500);
cout << endl;
cout <<" Операция вывода на экран сгенерированных чисел: Активирована пользователем.";
Sleep(3000);
cout << endl;
cout <<" Операция вывода на экран отсортированных чисел: Активирована пользователем.";}
if((Lastchance == 'N')||(Lastchance == 'n')) goto loop;
Sleep(1000);
cout << endl;
cout << endl;


cout << " Пожалуйста, подождите. Идёт загрузка операции";
Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500);cout << "."; Sleep(500); cout << "."; Sleep(500);
}


if((Offnumbers == 'N')||(Offnumbers == 'n'))

{ loop:
Offnumbers = 'N';
cout <<" Операция вывода на экран сгенерированных чисел: Отменена пользователем.";
cout << endl;
Sleep(1000);
cout <<" Операция вывода на экран отсортированных чисел: Отменена пользователем.";
Sleep(1000);
cout << endl;
cout << endl;
cout << " Пожалуйста, подождите. Идёт загрузка операции"; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500);cout << "."; Sleep(500); cout << "."; Sleep(500);
}




cout << endl;
cout << endl;

for (int i=0; i<ABSOLUT; i++) f[i]=GetRandKey(0);
for (int n = BEGIN; n<=ABSOLUT; n+=BEGIN)
{

cout << "============================================================================
====\n";
cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||\n";
cout << "============================================================================
====\n";
cout <<"\n				  <" << n <<"> элементов для генерации RGEN \n\n" << endl;
cout << "============================================================================
====\n";
cout << "					  Сортировка методом вставки \n\n";
cout << "============================================================================
====\n";
cout << " RGEN: ";
if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}

memcpy(k,f,n*sizeof(int));

while (true)
{
if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
}
cout << "============================================================================
====\n";
Sleep(1000);
cout << "Сгенерированно... ";
cout << endl;
cout << endl;
Sleep(3000);


cout << "Активация операции сортировки... "; 
Sleep(1000);
cout << endl;
cout << endl;
cout << "============================================================================
====\n";
cout << "Результат после сортировки: ";
if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
t1 = clock();
int SA = SortVstavka(k, n);
t2 = clock();
cout << "Loading";
Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << ".\n\n"; Sleep(500); 

while ((Offnumbers == 'Y')||(Offnumbers == 'y'))
{
if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n); break;
if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
}
Sleep(3000);
cout << "============================================================================
====\n";
cout << "Итоговое время замера времени выполнения цикла сортировки: ";
cout <<ends <<((double)(t2-t1))/((double)CLOCKS_PER_SEC)<<ends << ends;
Sleep(5000);
cout << endl;
cout << endl;
cout << "============================================================================
====\n";
cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||\n";
cout << "============================================================================
====\n";



cout << "					  Cортировка методом выбора\n\n";
cout << "============================================================================
====\n";
cout << " RGEN: ";
if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
memcpy(k,f,n*sizeof(int));
while (true)
{
if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
}

cout << "============================================================================
====\n";
Sleep(1000);
cout << "Сгенерированно... ";
cout << endl;
cout << endl;
Sleep(3000);
cout << endl;
cout << "Активация операции сортировки... "; 
Sleep(1000);
cout << endl;
cout << endl;

cout << "============================================================================
====\n";
cout << "Результат после сортировки: ";
if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
t1 = clock();
int SB = SortPrVybora(k, n);
t2 = clock();
cout << "Loading";
Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << ".\n\n"; Sleep(500); 
while (true)
{
if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
}

cout << "============================================================================
====\n";
cout << "Итоговое время замера времени выполнения цикла сортировки: ";
cout <<ends <<((double)(t2-t1))/((double)CLOCKS_PER_SEC)<<ends << ends;
Sleep(5000);
cout << endl;
cout << endl;
cout << "============================================================================
====\n";
cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||\n";
cout << "============================================================================
====\n";





cout << "					  Сортировка методом -пузырька-\n\n";
cout << "============================================================================
====\n";
cout << " RGEN: ";
if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
memcpy(k,f,n*sizeof(int));
while (true)
{
if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
}

cout << "============================================================================
====\n";
Sleep(1000);
cout << "Сгенерированно... ";
cout << endl;
cout << endl;
Sleep(3000);
cout << endl;
cout << "Активация операции сортировки... "; 
Sleep(1000);
cout << endl;
cout << endl;
cout << "============================================================================
====\n";
cout << "Результат после сортировки: ";
if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
t1 = clock();
int SC = SortPuz(k, n);
t2 = clock();
cout << "Loading";
Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << ".\n\n"; Sleep(500); 
while (true)
{
if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
}
cout << "============================================================================
====\n";
cout << "Итоговое время замера времени выполнения цикла сортировки: ";
cout <<ends <<((double)(t2-t1))/((double)CLOCKS_PER_SEC)<<ends << ends;
Sleep(5000);
cout << endl;
cout << endl;
cout << "============================================================================
====\n";
cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||\n";
cout << "============================================================================
====\n";



cout << "					  Сортировка Шейкера \n\n";
cout << "============================================================================
====\n";
cout << " RGEN: ";
if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
memcpy(k,f,n*sizeof(int));
while (true)
{
if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
}

cout << "============================================================================
====\n";
Sleep(1000);
cout << "Сгенерированно... ";
cout << endl;
cout << endl;
Sleep(3000);
cout << endl;
cout << "Активация операции сортировки... "; 
Sleep(1000);
cout << endl;
cout << endl;
cout << "============================================================================
====\n";
cout << "Результат после сортировки: ";
if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
t1 = clock();
int SD = SortSheiker(k, n);
t2 = clock();
cout << "Loading";
Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << ".\n\n"; Sleep(500); 
while (true)
{
if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
}
cout << "============================================================================
====\n";
cout << "Итоговое время замера времени выполнения цикла сортировки: ";
cout <<ends <<((double)(t2-t1))/((double)CLOCKS_PER_SEC)<<ends << ends;
Sleep(5000);
cout << endl;
cout << endl;
cout << "============================================================================
====\n";
cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||\n";
cout << "============================================================================
====\n";



cout << "						Сортировка Шелла \n\n";
cout << "============================================================================
====\n";
cout << " RGEN: ";
if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
memcpy(k,f,n*sizeof(int));
while (true)
{
if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
}
cout << "============================================================================
====\n";
Sleep(1000);
cout << "Сгенерированно... ";
cout << endl;
cout << endl;
Sleep(3000);
cout << endl;
cout << "Активация операции сортировки... "; 
Sleep(1000);
cout << endl;
cout << endl;
cout << "============================================================================
====\n";
cout << "Результат после сортировки: ";
if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
t1 = clock();
int SE = SortShella(k, n);
t2 = clock();
cout << "Loading";
Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << ".\n\n"; Sleep(500); 
while (true)
{
if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
}
cout << "============================================================================
====\n";
cout << "Итоговое время замера времени выполнения цикла сортировки: ";
cout <<ends <<((double)(t2-t1))/((double)CLOCKS_PER_SEC)<<ends << ends;
Sleep(5000);
cout << endl;
cout << endl;
cout << "============================================================================
====\n";
cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||\n";
cout << "============================================================================
====\n";




cout << "						 Сортировка подсчётом \n\n";
cout << "============================================================================
====\n";
cout << " RGEN: ";
if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
memcpy(k,f,n*sizeof(int));
while (true)
{
if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
}

cout << "============================================================================
====\n";
Sleep(1000);
cout << "Сгенерированно... ";
cout << endl;
cout << endl;
Sleep(3000);
cout << endl;
cout << "Активация операции сортировки... "; 
Sleep(1000);
cout << endl;
cout << endl;
cout << "============================================================================
====\n";
cout << "Результат после сортировки: ";
if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
t1 = clock();
int SF = Podschet(k, n);
t2 = clock();
cout << "Loading";
Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << ".\n\n"; Sleep(500); 
while (true)
{
if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
}
cout << "============================================================================
====\n";
cout << "Итоговое время замера времени выполнения цикла сортировки: ";
cout << ends <<((double)(t2-t1))/((double)CLOCKS_PER_SEC)<< ends << ends;
Sleep(5000);
cout << endl;
cout << endl;
cout << "============================================================================
====\n";
cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||\n";
cout << "============================================================================
====\n";


cout << endl;
cout << endl;

}

return 0;
}

sort.cpp

C++:
#include "stdafx.h"
#include <iostream>
#include "string.h"
#include "sort.h"
#include "time.h"
using namespace std;
int GetRandKey(int reg = 0)
{
if (reg > 0) srand((unsigned)time(NULL));
int rmin = 0;			 
int rmax = 100;	 
return (int)(((double) rand()/(double)RAND_MAX)*(rmax-rmin) + rmin);
}

void Print (int m[], int n)
{
for (int i=0; i<n; i++)
cout << m[i] << ends;
cout << endl;
}
int SortVstavka (int m[], int n)
{
int buf, k;
for (int i=1; i<n; i++) 
{
buf = m[i];
k = i-1;
while (m[k]>buf) m[k+1] = m[k--];
m[k+1] = buf;
}
return *m;
}

int SortPrVybora (int m[], int n)
{
for (int i=0; i<n; i++)
for (int j=i+1; j<+n; j++)
{
if (m[i]>m[j])
{
int buf = m[i];
m[i]=m[j];
m[j]=buf;
}
}
return *m;
}
int SortPuz (int m[], int n)
{
for (int i=0; i<n; i++)
for (int j=0; j<n-i-1; j++)
{
if (m[j]>m[j+1])
{
int buf = m[j];
m[j] = m[j+1];
m[j+1] = buf;
}
}
return *m;
}
int SortSheiker (int m[], int n)
{
bool end = false;
for (int i=0; (i<n) && !end; i++)
{
end = true;
for (int j=0; j<n-i-1; j++)
{
if (m[j]>m[j+1])
{
int buf = m[j];
m[j] = m[j+1];
m[j+1] = buf;
end = false;
}
}
}
return *m;
}
int SortShella(int m[], int n)
{
int buf;
bool sort;
for (int g = n/2; g > 0; g/=2)
{
do
{
sort = false;
for (int i = 0, j = g; j < n; i++,j++)
{
if (m[i] > m[j])
{
sort = true;
buf = m[i];
m[i] = m[j];
m[j] = buf;
}
} 
} while (sort); 
}
return *m; 
} 

int Podschet(int m[],int n)
{ int i,j ,cnt;
int temp[5000];
for (i=0; i < n; i++) 
{
for ( cnt=0,j=0; j<n; j++)
if (m[j] < m[i]) cnt++; 
temp[cnt]=m[i];
}

return 0;
}

sort.h

C++:
#pragma once
int SortVstavka (int m[], int n);
int SortPrVybora (int m[], int n);
int SortPuz (int m[], int n);
int SortSheiker (int m[], int n);
int SortShella(int m[], int n);
int GetRandKey(int reg);
int Podschet(int m[],int n);
void Print (int m[], int n);
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!