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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2011, 21:44   #1
mikebrownen
Пользователь
 
Регистрация: 18.09.2011
Сообщений: 21
По умолчанию Сортировка массива строк методом Шелла

Я делаю сортировку Шеллом числа он сортирует, но массив строк почему то вылетает с ошибкой сегментации.... И можете сказать мой алгоритм это точно Шелл? И почему он вылетает с ошибкой... Спасибо!
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void transfer(char *inp, char *outp)
{
    int i=5;
    for(i=0;i<5;i++)
    {
        outp[i]=inp[i];
        outp[5]=0;
    }
}

int fibmas[45]={1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144,
233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946,
17711, 28657, 46368, 75025, 121393, 196418, 317811,
 514229, 832040, 1346269, 2178309, 3524578, 5702887,
  9227465, 14930352, 24157817, 39088169, 63245986,
  102334155, 165580141, 267914296, 433494437, 701408733,
   1134903170, 1836311903};

int increment(long inc[], long size) {

    int i;
    for(i=0;fibmas[i]<size/2;i++)
        inc[i]=fibmas[i];
  return i;
}


void shellSort(char **a, long size) {
  long inc, i, j, seq[45];
  int s;

  s = increment(seq, size);
  while (s >= 0) {

	inc = seq[s--];

    for (i = inc; i < size; i++) {
      char temp[5];
      transfer(&a[i],&temp);
      for (j = i-inc; (j >= 0) && (strcmp(a[j],temp)>0); j -= inc)
        transfer(&a[j],&a[j+inc]);
      transfer(&temp,&a[j+inc]);
    }
  }
}

int main()
{
    char mas[15][5]={'sdsqw','yuyug','yurgh','uikik','opopj','fgfrr','ggakp','uiuii','uiuid','xcxca','fggru','gffbx','qwewe','wewlo','ewegg'};
    int i;

    shellSort(mas,15);
    for (i=0;i<15;i++)
        printf("%s ",mas[i]);
    printf("\n");



    return 0;
}
mikebrownen вне форума Ответить с цитированием
Старый 21.10.2011, 22:03   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
outp[5]=0;
уверен? ===

Последний раз редактировалось counter; 21.10.2011 в 22:05.
counter вне форума Ответить с цитированием
Старый 21.10.2011, 23:47   #3
mikebrownen
Пользователь
 
Регистрация: 18.09.2011
Сообщений: 21
По умолчанию

Ну так мыж должны завершить сишную строку нулем...
mikebrownen вне форума Ответить с цитированием
Старый 21.10.2011, 23:51   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

а то, что в массиве temp[5] последний символ будет с индексом 4 ничего страшного?
counter вне форума Ответить с цитированием
Старый 22.10.2011, 21:08   #5
mikebrownen
Пользователь
 
Регистрация: 18.09.2011
Сообщений: 21
По умолчанию

ну так нам не нужно символ затирать нам нужно после всех символов ноль записать в конец строки... собственно сам алгоритм копирования не является проблемой... можно использовать memcpyю Проблема именно в алгоритме сортировки!
mikebrownen вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка матрицы методом Шелла NewbieStudent Помощь студентам 4 06.12.2010 18:43
Сортировка методом Шелла Nostalgia Помощь студентам 0 12.04.2010 14:13
Помогите решить задачу в C++ на массивы + сортировка методом Шелла Exact Помощь студентам 2 18.06.2009 14:44
Сортировка массива способом Шелла "степени двойки" xxxPascalxxx Помощь студентам 2 15.11.2008 21:58