Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:C++ / ClassSort
.cpp#include "Cl_Random.h"
#include "ClassSort.h"
void SORT :: InitMas(unsigned int *_Mas, unsigned int _N)
{
ErrorCode=0;
if(_Mas == NULL || !_N){ErrorCode = 3; return;}
Mas = _Mas;
N = _N;
}
short int SORT :: GetErrorCode(void){return ErrorCode;}
void SORT :: ShowMsg()
{
switch(ErrorCode){
case 1:
printf("\n Ошибка захвата памяти под массив генеральной совокупности");
break;
case 2:
printf("\n Ошибка захвата памяти под массив выборки из N элементов");
break;
case 3:
printf("\n Ошибка задания входного параметра, либо память под массивы не захвачена");
break;
case 4:
printf("\n Не определен массив данных для модуля bubble");
break;
case 5:
printf("\n Ошибка сортировки");
break;
case 6:
printf("\n Не определен массив данных для модуля select");
break;
case 7:
printf("\n Не определен массив данных для модуля insert");
break;
case 8:
printf("\n Не определен массив данных для модуля Shell");
break;
case 9:
printf("\n Не определен массив данных для модуля quick");
break;
}
}
void SORT :: ProvSort()
{
unsigned int i;
if(KeSort < 2){
ErrorCode=3;
ShowMsg();
return;
}
for(i=1; i<KeSort; i++)
if(Mas[i-1]> Mas[i]){
ErrorCode=5;
ShowMsg();
return;
}
return;
}
void SORT :: bubble()
{
// Сортировка пузырьком
unsigned int a,b;
unsigned int t;
if(!KeSort){
ErrorCode=4;
ShowMsg();
return;
}
for(a=1; a<KeSort; a++)
for(b=KeSort-1; b>=a; b--)
if(Mas[b-1] > Mas[b]){t=Mas[b-1]; Mas[b-1]=Mas[b]; Mas[b]=t;}
return;
}
void SORT :: select()
{
// Cортировка отбором
unsigned int a,b,c;
bool flag;
unsigned int t;
if(!KeSort){
ErrorCode=6;
ShowMsg();
return;
}
for(a=0; a<KeSort-1; a++){
flag=false;
c=a;
t=Mas[a];
for(b=a+1; b<KeSort; b++)
if(Mas[b] < t){c=b; t=Mas[b]; flag=true;}
if(flag){Mas[c]=Mas[a]; Mas[a]=t;}
}
return;
}
void SORT :: insert()
{
// Сортировка вставкой
unsigned int a,b;
unsigned int t;
if(!KeSort){
ErrorCode=7;
ShowMsg();
return;
}
for(a=1; a<KeSort; a++){
t=Mas[a];
for(b=a-1;b>=0 && t<Mas[b]; b--)Mas[b+1]=Mas[b];
Mas[b+1]=t;
}
return;
}
void SORT :: Shell()
{
unsigned int gap,i,j;
unsigned int t;
if(!KeSort){
ErrorCode=8;
ShowMsg();
return;
}
for(gap=KeSort/2; gap>0; gap/=2)
for(i=gap; i<KeSort; i++)
for(j=i-gap; j>=0 && Mas[j]>Mas[j+gap]; j-=gap){
t=Mas[j]; Mas[j]=Mas[j+gap]; Mas[j+gap]=t;
}
}
void SORT :: quick()
{
if(!KeSort){
ErrorCode=9;
ShowMsg();
return;
}
qs(Mas,0,KeSort-1);
}
void SORT :: qs(unsigned int *A, unsigned int left, unsigned int right)
{
unsigned int i,j;
unsigned int x,y;
i=left; j=right;
x=A[(left+right)/2];
do
{
while(A[i] < x && i<right) i++;
while(x< A[j] && j > left)j--;
if(i <= j){
y=A[i];
A[i]=A[j];
A[j]=y;
i++; j--;
}
}while(i<=j);
if(left < j) qs(A,left,j);
if(i < right) qs(A,i,right);
}
Соседние файлы в папке C++