Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Быстрая сортировка

50K
25 декабря 2009 года
octo96
13 / / 04.12.2009
Нужна программа для сортировки быстрым методом, помогите кто розбирается
602
26 декабря 2009 года
KPI Student
265 / / 16.12.2006
Цитата:
Нужна программа для сортировки быстрым методом, помогите кто розбирается



кОчай на здоровье здеся. Сортирует очень быстро - только что сам проверил!

50K
27 декабря 2009 года
octo96
13 / / 04.12.2009
Извините не указал язык программирования, я имел ввиду язык С++.
50K
27 декабря 2009 года
octo96
13 / / 04.12.2009
Опишите етот код (Если можно то построчно)
Код:
#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());
}
8.4K
27 декабря 2009 года
z0rch
275 / / 02.09.2008
Цитата: 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);  
};
50K
19 января 2010 года
octo96
13 / / 04.12.2009
Мне именно ета прога нужна просто ето метод побитовой сортировки.
Функцию main() описивать не нужно. А вот остальное напишыте пожалуста, очень нужно
307
19 января 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: 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());
}



могу тебя обрадовать, добрый дядя гугл(ознакомься, в учебе помогает) тебе поможет.
Вот
Вот
А теперь вопрос, самому было трудно поискать в инете исходник алгоритма, который из года в год реализуют студенты половины технических вузов страны???

ЗЫ: не "етот", а "этот". и не "розбирается", а "разбирается". хочешь, что бы тебя считали нормальным, пиши нормально.

50K
19 января 2010 года
octo96
13 / / 04.12.2009
Ето описание у меня есть я хотел более подробное, что делает каждая строка
Насчет языка, просто я русского не знаю я говорю по ураински и пишу тоже так что прошу простить за правописание.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог