Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2008, 17:52   #1
vova_b
 
Регистрация: 07.03.2008
Сообщений: 4
По умолчанию Помогите с MSD сортировкой!

Привет! Нуждаюсь в срочной помощи:
Есть поразрядная MSD сортировка
Код:
#include <iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
clock_t start,finish;


void createCounters(char *, long *, long );
void radixPass(short , long , char *, char *, long *);
void radixSort(char* &, long );
void printMass(char [], char );

main()
{
  char a[] ="qwertyuiopasdfghjklzqwertyuiopasdfghjklzqwertyuiopasdfghjklzqwertyuiopasdfgh
jklz";

  printMass(a, sizeof(a)/sizeof(char));
  start=clock();
  for(int i=0;i<24000;i++){
  radixSort(a, sizeof(a)/sizeof(char));

  finish=clock();          }
  printMass(a, sizeof(a)/sizeof(char));

cin.get();
return 0;
}

void createCounters(char *data, long *counters, long N)
{
  memset( counters, 0, 256*sizeof(int)*sizeof(long) );

  char *bp = (char*)data;
  char *dataEnd = (char*)(data + N);
  short i;

    while ( bp != dataEnd )
   {
        for (i=0; i<sizeof(char);i++)
            counters[256*i + *bp++]++;
    }
}

void radixPass (short Offset, long N, char *source, int *dest, long *count)
{
  char *sp;
  long s, c, i, *cp;
  char *bp;

  s = 0;
  cp = count;
  for (i = 256; i > 0; --i, ++cp)
  {
      c = *cp;
      *cp = s;
      s += c;
  }

  bp = (char *)source + Offset;
  sp = source;
  for (i = N; i > 0; --i, bp += sizeof(char) , ++sp)
  {
      cp = count + *bp;
      dest[*cp] = *sp;
      ++(*cp);
  }
}

void radixSort (char* &in, long N)
{
  int *out = new int[N];
  int *temp = new int[N];
  long *counters = new long[sizeof(int)*256], *count;
  createCounters(in, counters, N);

  for (short i=0; i<sizeof(char); i++)
  {
      count = counters + 256*i;

      if ( count[0] == N ) continue;

      radixPass (i, N, in, out, count);
    for(int i = 0;i < N; ++i)
    {
     temp[i]=in[i];
     in[i]=out[i];
     out[i]=temp[i];
    }
  }

  delete out;
  delete counters;
  delete temp;
}

void printMass(char A[], char f)
{
  cout << "\nMass:";
  for(int i = 0; i < f; i++)
  cout << ' ' << A[i];
  cout << '\n';

  cout <<"time"<<(finish-start);
}
Данная программа сортирует массив букв по алфавиту, а как сделать сортировку строк по алфавиту?????? КТО МОЖЕТ ПОМОГИТЕ!!!!
vova_b вне форума Ответить с цитированием
Старый 28.05.2008, 19:15   #2
vova_b
 
Регистрация: 07.03.2008
Сообщений: 4
По умолчанию

Помогите ктонить, очень надо
vova_b вне форума Ответить с цитированием
Старый 28.05.2008, 19:54   #3
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

А чем по вашему массив букв (символов) отличается от строки?
MaTBeu вне форума Ответить с цитированием
Старый 28.05.2008, 20:10   #4
vova_b
 
Регистрация: 07.03.2008
Сообщений: 4
По умолчанию

Впринципе нечем, но не получаеться, если я ввоже например слово Privet то оно берет его как массив символов, а как сделать что б брало как слово незнаю!
vova_b вне форума Ответить с цитированием
Старый 28.05.2008, 20:14   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

А что тогда Вы понимаете под выражением "слово"? У Вас есть сортировка букв по алфавиту... каждый элемент строки - символ. Так что же вам мешает сделать сортировку я не пойму???
MaTBeu вне форума Ответить с цитированием
Старый 28.05.2008, 20:21   #6
vova_b
 
Регистрация: 07.03.2008
Сообщений: 4
По умолчанию

мне нужно: наприме есть 3 слова:
Yandex
Google
Rambler
мне нужно что б их отсортировало:
Google
Rambler
Yandex
тоесть сортировало слова в алфовитном порядке
vova_b вне форума Ответить с цитированием
Старый 28.05.2008, 20:33   #7
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Так это вообще просто. Берете и соим мудреным алгоритмом сравниваете первые буквы. А если есть два или больш слова, которые начинаются с одной и той же буквы. То проверять в них надо не только првые но и вторые буквы и так далее...
MaTBeu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с сортировкой. Dissonance БД в Delphi 14 05.06.2008 15:35
Помогите решить вопрос с сортировкой ! slavun Microsoft Office Excel 2 31.01.2008 15:14
Помогите с сортировкой AHTOXA Общие вопросы Delphi 2 08.06.2007 12:46
Помогите с сортировкой radist Паскаль, Turbo Pascal, PascalABC.NET 5 23.04.2007 12:50