Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сортировка быстрым методом (кусорт) / 14 сообщений из 14, страница 1 из 1
22.04.2007, 18:35
    #34478782
errorka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка быстрым методом (кусорт)
Кто мне может помочь написать сортирвоку быстрым методом для двухмерного массива. Я написала, но мой метод не принимают,а по другому написать я не могу. Помогите пожалуйста,если не жалко....
...
Рейтинг: 0 / 0
22.04.2007, 19:56
    #34478852
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка быстрым методом (кусорт)
Ошибочка вводных мало
0) тебе собственно сам йыщке надо было написать или использовать его для сортировки?
1) покажи что написала
2) скажи в чем притензия, ежели конеччно озвучили
...
Рейтинг: 0 / 0
22.04.2007, 20:12
    #34478869
errorka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка быстрым методом (кусорт)
void Bistrya(int m, int n)
{
i=m;
k=n;
dopoln=matriza[(i+k)/2][j];
do
{
while (fabs(matriza [j])<fabs(dopoln) && i<=n)i++;
while (fabs(matriza[k][j])>fabs(dopoln) && k>=m)k--;
if (i<=k)
{
prom=matriza[j];
matriza[j]=matriza[k][j];
matriza[k][j]=prom;
i++;k--;srav++;per++;
}

}
while (i<=k);
if (m < k)
Bistrya(m, k);
if (i < n)
Bistrya(i, n);

Думаю в переменных можно разобраться... А не понравилось то,что такое уже кто-то писал...
А задача такая: есть массив и его надо отсортировать....
...
Рейтинг: 0 / 0
22.04.2007, 21:04
    #34478933
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка быстрым методом (кусорт)
errorka
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
void Bistrya(int m, int n)
{
i=m;
k=n;
dopoln=matriza[(i+k)/ 2 ][j];
do 
{
  while (fabs(matriza[i][j])<fabs(dopoln) && i<=n)i++;
  while (fabs(matriza[k][j])>fabs(dopoln) && k>=m)k--;
       if (i<=k)
		{
		prom=matriza[i][j];
		matriza[i][j]=matriza[k][j];
		matriza[k][j]=prom;
		i++;k--;srav++;per++;
		}

}
while (i<=k);
if (m < k) 
Bistrya(m, k); 
   if (i < n)
     Bistrya(i, n); 
Думаю в переменных можно разобраться... А не понравилось то,что такое уже кто-то писал...
А задача такая: есть массив и его надо отсортировать....
Должен тебя огорчить разобраться практически невозможно. Ты либо неправильно вырезала либо я чег-то не понимаю. Больше половины переменных не декларированы.Ну и что уж точно можно сказать алгоритм не лежал близко к qsort
Ну и как сортировать эту матрицу? построчно(можно) или по колонкам(нельзя). Матрица чего? или как в классическом qsort void*, сравнивать с помощю оператора < строки матрицы нельзя, тогда нежен критерий сравнения или как в классическм qsort - с помощью указателя на функцию?
Если есть книжка Страуструпа то там точно есть реализация qsort ее только обобщить на случай матрицы
...
Рейтинг: 0 / 0
22.04.2007, 21:18
    #34478945
errorka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка быстрым методом (кусорт)
Нужно отсортировать матрицу чисел 10 на 10... Можете помочь? Может мою сортировку лучше не смотреть?
...
Рейтинг: 0 / 0
22.04.2007, 21:31
    #34478958
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка быстрым методом (кусорт)
errorkaНужно отсортировать матрицу чисел 10 на 10... Можете помочь? Может мою сортировку лучше не смотреть?
Отвечай конкретно:
Чего сортировать, строки?
Указатели на функцию проходили?
Шаблоны и прочую ерунду?
Сортировать имено qsort-ом?
А то сейчас насортирую....
...
Рейтинг: 0 / 0
22.04.2007, 21:46
    #34478975
errorka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка быстрым методом (кусорт)
задание: Упорядочить каждый столбец матрицы по убыванию абсолютных величин.
Указатели на фукцию проходили,но я ничего не поняла...
Шаблоны и т.д. нет
Сортировать вообще пятью способами,но у меня не получился именно qsort,а со встакой надеюсь сама как нить попробую еще,но была бы не против от помощи))))
...
Рейтинг: 0 / 0
22.04.2007, 22:26
    #34479012
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка быстрым методом (кусорт)
errorka пишет:

> void Bistrya(int m, int n)

Вряд ли это quick sort. quick sort сложный достаточно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
23.04.2007, 00:09
    #34479090
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка быстрым методом (кусорт)
Ладно теорию на потом итак сортировать оказывается надо не матрицу а элементы в одной колонке матрицы по некоторому критерию ( в нашем случае по убыванию абсолютных величин, т. е. в порядке обратном fabs) вот только элементы в колонке следуют в массиве не друг за другом, а на расстоянии в n элементов, где n - количество столбцов в таблице.
итак нам потребуется функция сравнения:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
typedef int (*compare)(void *, void* );   // указатель на функцию сравнения

// в нашем случае функция сравнения такая
int my_cpm(void* left, void* right)
{
  double l = fabs(*((double*) left));
  double r = fabs(*((double*) right));
  return l > r ? - 1  : l < r;
}

void swap(char* lptr, char* rptr, size_t sz)
{
  char tmp;
  for (int i =  0 ; i < sz; ++i)
  {
    tmp = lptr[i];
    lptr[i] = rptr[i];
    rptr[i] = tmp;
  }
}

int partition(void* ptr, size_t rows, size_t cols, size_t col, size_t sz, compare cmp)
{
  char* pptr = (char*) ptr + col * sz;
  int i = - 1 ;
  int j = rows;
  while (true)
  {
     char* rptr, lptr =  0 ;
     for(--j; j > 0 ; --j)
     {
        rptr = pptr + j * cols * sz;
        if (cmp(pptr, rptr) >= 0 )
          break;
     }
     for(++i; i != j; ++i)
     {
        lptr = pptr + i * cols * sz;
        if (cmp(pptr, lptr) <= 0 )
          break;
     }
     if (i < j)
       swap(i, j, sz);
     else 
       return j;
  }
}

void column_qsort(void* ptr, size_t rows, size_t cols, size_t col, size_t sz, compare cmp)
{
  if (rows <=  1 )
    return;
  int qrow = partition(pptr, rows, cols, col, sz, cmp);
  column_qsort(pptr, qrow, cols, col, sz, cmp);
  column_qsort(((char*)pptr + (qrow +  1 ) * cols * sz), (rows - qrow), cols, col, sz, cmp)
}

int main()
{
  double matrix[ 10 ][ 5 ];
  for ( int i =  0 ; i <  10 ; ++i)
    column_qsort(matrix,  10 ,  5 , i, sizeof(double), my_cmp); 
}
Ну примерно так, но не отлаживал.
PS дедушка устал и пошел баиньки
...
Рейтинг: 0 / 0
23.04.2007, 18:59
    #34481619
errorka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка быстрым методом (кусорт)
Таааак все сложно!!!!!!! Так много функций и прочего!!!!
...
Рейтинг: 0 / 0
23.04.2007, 20:10
    #34481750
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка быстрым методом (кусорт)
errorkaТаааак все сложно!!!!!!! Так много функций и прочего!!!!
Дедушка все по учебнику сделал, у может маханул чутка. Ты спрашивай, спрашивай внученька
Зато твой препод тоже ничего не сообразит. Во всяком случае точно разбираться не будет.
...
Рейтинг: 0 / 0
23.04.2007, 21:38
    #34481875
errorka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка быстрым методом (кусорт)
Вот именно что препод сказал,что я буду сдавать эту прогу до последней капли крови(((( Так что надо понять все-все...
...
Рейтинг: 0 / 0
23.04.2007, 22:08
    #34481913
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка быстрым методом (кусорт)
errorkaВот именно что препод сказал,что я буду сдавать эту прогу до последней капли крови(((( Так что надо понять все-все...Тогда тебе прийдется самой прочитать учебник....
читай здесь:
http://en.wikipedia.org/wiki/Quicksort
или здесь:
http://algolist.manual.ru/sort/quick_sort.php
...
Рейтинг: 0 / 0
24.04.2007, 19:01
    #34484659
errorka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка быстрым методом (кусорт)
Пасибо!!! Очень полезные сайты,я о них не знала)))
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сортировка быстрым методом (кусорт) / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]