#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
struct el
{
int val;
el*next,*prev;
};
struct stack
{
el*cur,*mass;
int n,stackempty;
stack();
insert(int);
release();
reverserelease();
};
stack::stack()
{
n=0;
cur=mass=NULL;
stackempty=1;
}
stack::reverserelease()
{
int ret;
if(n==0)
return 0;
ret=mass->val;
if(mass->next!=NULL){
mass=mass->next;
delete mass->prev;
}
else
delete mass;
n--;
if(n==0)
stackempty=1;
return ret;
}
stack::release()
{
int ret;
if(n==0)
return 0;
ret=cur->val;
cur=cur->prev;
if(cur==NULL)
delete mass;
else
delete cur->next;
n--;
if(n==0)
stackempty=1;
return ret;
}
stack::insert(int ins)
{
stackempty=0;
if(n==0){
mass=new el;
mass->prev=NULL;
mass->next=NULL;
mass->val=ins;
cur=mass;
n++;
return 0;
}
cur->next=new el;
cur->next->prev=cur;
cur->next->next=NULL;
cur->next->val=ins;
cur=cur->next;
n++;
return 0;
}
{
int i,j,k,step;
int bit,cbit;
switch(base)
{
case 2: step=1; break;
case 4: step=2; break;
case 8: step=3; break;
case 16: step=4; break;
case 32: step=5; break;
case 512: step=9; break;
case 65536: step=16; break;
default:
printf("Error in sorting base: %d",base);
return;
}
stack*st=new stack[base];
for(i=0;i<sizeof(int)*8;i=i+step)
{
cbit=(base-1)<<i;
for(j=0;j<len;j++)
{
bit=p[numb[j]]&cbit;
bit=bit>>i;
st[bit].insert(numb[j]);
}
k=0;
/* этот код отвечает за построение возрастающей последовательности */
// for(j=0;j<base;j++)
// {
// while(!st[j].stackempty)
// {
// numb[k]=st[j].reverserelease();
// k++;
// }
// }
if(k!=len)
{
printf("Error occured while sorting array");
return;
}
}
delete st;
}
void main()
{
system("cls");
int z = 0;
int *p, *sorted, n = 0, i = 0, j = 0;
stack st;
unsigned int n_el = 0, max = 1024;
clock_t start = 0,end = 0;
float t1 = 0;
n = 10/*0000*/;
p = new int[n];
sorted = new int[n];
srand((unsigned int)time(0l));
for(i = 0; i < n; i++)
{
p = rand();
sorted = i;
}
for(i = 0; i < n; i++)
{
printf("%d\r\n",p[sorted]);
}
printf("Press any key to begin sorting\r\n");
getch();
start = clock();
bitsort(p, sorted, n, 65536);
end=clock();
t1 = (float)(end-start) ;
printf("%lf\n",t1);
for(i = 0; i < n; i++)
{
printf("%d\r\n",p[sorted]);
}
delete p;
delete sorted;
printf("Press any key to continue");
while (!_getch());
}
Быстрая сортировка
Нужна программа для сортировки быстрым методом, помогите кто розбирается
Цитата:
Нужна программа для сортировки быстрым методом, помогите кто розбирается
кОчай на здоровье здеся. Сортирует очень быстро - только что сам проверил!
Извините не указал язык программирования, я имел ввиду язык С++.
Опишите етот код (Если можно то построчно)
Цитата: octo96
Извините не указал язык программирования, я имел ввиду язык С++.
quick sort помоему уже описана в stdlib.h. - функция qsort. А вот мой код:
Код:
int s_arr[MAX];
int n;//кол-во элементов в массиве
int main()
{
...
q_sort(s_arr,0,n-1);//вызов сортировки
...
}
void q_sort(int* s_arr,int first,int last)
{
int i=first, j=last,x=s_arr[(first*last)/2];
do
{
while(s_arr < x) i++;
while(s_arr[j] > x) j++;
if(i <= j)
{
if(i < j) swap(s_arr,s_arr[j]);
i++;
j--;
}
}
while(i <= j);
if(i < last)
q_sort(s_arr,i,last);
if(first < j)
q_sort(s_arr,first,j);
};
int n;//кол-во элементов в массиве
int main()
{
...
q_sort(s_arr,0,n-1);//вызов сортировки
...
}
void q_sort(int* s_arr,int first,int last)
{
int i=first, j=last,x=s_arr[(first*last)/2];
do
{
while(s_arr < x) i++;
while(s_arr[j] > x) j++;
if(i <= j)
{
if(i < j) swap(s_arr,s_arr[j]);
i++;
j--;
}
}
while(i <= j);
if(i < last)
q_sort(s_arr,i,last);
if(first < j)
q_sort(s_arr,first,j);
};
Функцию main() описивать не нужно. А вот остальное напишыте пожалуста, очень нужно
Цитата: octo96
Опишите етот код (Если можно то построчно)
Код:
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
struct el
{
int val;
el*next,*prev;
};
struct stack
{
el*cur,*mass;
int n,stackempty;
stack();
insert(int);
release();
reverserelease();
};
stack::stack()
{
n=0;
cur=mass=NULL;
stackempty=1;
}
stack::reverserelease()
{
int ret;
if(n==0)
return 0;
ret=mass->val;
if(mass->next!=NULL){
mass=mass->next;
delete mass->prev;
}
else
delete mass;
n--;
if(n==0)
stackempty=1;
return ret;
}
stack::release()
{
int ret;
if(n==0)
return 0;
ret=cur->val;
cur=cur->prev;
if(cur==NULL)
delete mass;
else
delete cur->next;
n--;
if(n==0)
stackempty=1;
return ret;
}
stack::insert(int ins)
{
stackempty=0;
if(n==0){
mass=new el;
mass->prev=NULL;
mass->next=NULL;
mass->val=ins;
cur=mass;
n++;
return 0;
}
cur->next=new el;
cur->next->prev=cur;
cur->next->next=NULL;
cur->next->val=ins;
cur=cur->next;
n++;
return 0;
}
{
int i,j,k,step;
int bit,cbit;
switch(base)
{
case 2: step=1; break;
case 4: step=2; break;
case 8: step=3; break;
case 16: step=4; break;
case 32: step=5; break;
case 512: step=9; break;
case 65536: step=16; break;
default:
printf("Error in sorting base: %d",base);
return;
}
stack*st=new stack[base];
for(i=0;i<sizeof(int)*8;i=i+step)
{
cbit=(base-1)<<i;
for(j=0;j<len;j++)
{
bit=p[numb[j]]&cbit;
bit=bit>>i;
st[bit].insert(numb[j]);
}
k=0;
/* этот код отвечает за построение возрастающей последовательности */
// for(j=0;j<base;j++)
// {
// while(!st[j].stackempty)
// {
// numb[k]=st[j].reverserelease();
// k++;
// }
// }
if(k!=len)
{
printf("Error occured while sorting array");
return;
}
}
delete st;
}
void main()
{
system("cls");
int z = 0;
int *p, *sorted, n = 0, i = 0, j = 0;
stack st;
unsigned int n_el = 0, max = 1024;
clock_t start = 0,end = 0;
float t1 = 0;
n = 10/*0000*/;
p = new int[n];
sorted = new int[n];
srand((unsigned int)time(0l));
for(i = 0; i < n; i++)
{
p = rand();
sorted = i;
}
for(i = 0; i < n; i++)
{
printf("%d\r\n",p[sorted]);
}
printf("Press any key to begin sorting\r\n");
getch();
start = clock();
bitsort(p, sorted, n, 65536);
end=clock();
t1 = (float)(end-start) ;
printf("%lf\n",t1);
for(i = 0; i < n; i++)
{
printf("%d\r\n",p[sorted]);
}
delete p;
delete sorted;
printf("Press any key to continue");
while (!_getch());
}
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
struct el
{
int val;
el*next,*prev;
};
struct stack
{
el*cur,*mass;
int n,stackempty;
stack();
insert(int);
release();
reverserelease();
};
stack::stack()
{
n=0;
cur=mass=NULL;
stackempty=1;
}
stack::reverserelease()
{
int ret;
if(n==0)
return 0;
ret=mass->val;
if(mass->next!=NULL){
mass=mass->next;
delete mass->prev;
}
else
delete mass;
n--;
if(n==0)
stackempty=1;
return ret;
}
stack::release()
{
int ret;
if(n==0)
return 0;
ret=cur->val;
cur=cur->prev;
if(cur==NULL)
delete mass;
else
delete cur->next;
n--;
if(n==0)
stackempty=1;
return ret;
}
stack::insert(int ins)
{
stackempty=0;
if(n==0){
mass=new el;
mass->prev=NULL;
mass->next=NULL;
mass->val=ins;
cur=mass;
n++;
return 0;
}
cur->next=new el;
cur->next->prev=cur;
cur->next->next=NULL;
cur->next->val=ins;
cur=cur->next;
n++;
return 0;
}
{
int i,j,k,step;
int bit,cbit;
switch(base)
{
case 2: step=1; break;
case 4: step=2; break;
case 8: step=3; break;
case 16: step=4; break;
case 32: step=5; break;
case 512: step=9; break;
case 65536: step=16; break;
default:
printf("Error in sorting base: %d",base);
return;
}
stack*st=new stack[base];
for(i=0;i<sizeof(int)*8;i=i+step)
{
cbit=(base-1)<<i;
for(j=0;j<len;j++)
{
bit=p[numb[j]]&cbit;
bit=bit>>i;
st[bit].insert(numb[j]);
}
k=0;
/* этот код отвечает за построение возрастающей последовательности */
// for(j=0;j<base;j++)
// {
// while(!st[j].stackempty)
// {
// numb[k]=st[j].reverserelease();
// k++;
// }
// }
if(k!=len)
{
printf("Error occured while sorting array");
return;
}
}
delete st;
}
void main()
{
system("cls");
int z = 0;
int *p, *sorted, n = 0, i = 0, j = 0;
stack st;
unsigned int n_el = 0, max = 1024;
clock_t start = 0,end = 0;
float t1 = 0;
n = 10/*0000*/;
p = new int[n];
sorted = new int[n];
srand((unsigned int)time(0l));
for(i = 0; i < n; i++)
{
p = rand();
sorted = i;
}
for(i = 0; i < n; i++)
{
printf("%d\r\n",p[sorted]);
}
printf("Press any key to begin sorting\r\n");
getch();
start = clock();
bitsort(p, sorted, n, 65536);
end=clock();
t1 = (float)(end-start) ;
printf("%lf\n",t1);
for(i = 0; i < n; i++)
{
printf("%d\r\n",p[sorted]);
}
delete p;
delete sorted;
printf("Press any key to continue");
while (!_getch());
}
могу тебя обрадовать, добрый дядя гугл(ознакомься, в учебе помогает) тебе поможет.
Вот
Вот
А теперь вопрос, самому было трудно поискать в инете исходник алгоритма, который из года в год реализуют студенты половины технических вузов страны???
ЗЫ: не "етот", а "этот". и не "розбирается", а "разбирается". хочешь, что бы тебя считали нормальным, пиши нормально.
Насчет языка, просто я русского не знаю я говорю по ураински и пишу тоже так что прошу простить за правописание.