Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.72
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
#1

qsort, рабочий день убит... - C++

13.09.2008, 00:18. Просмотров 4363. Ответов 4
Метки нет (Все метки)

Всем привет,
Я, наверное, представляться не буду

Вообщем, один мой рабочий день на этой неделе был убит такой вещью: делал я задачку на сортировку строк в матрице. Решил делать через qsort. Но, че-то мои мозги повисли на мысли что сортировка не пашет на количестве элементов большем 9... брррр. Писал в VS 2008 (в 2005 тоже пробовал). Забил я на матрицу и сократил до такого:
Код
#include <stdio.h>
#include <stdlib.h>

int compare( const void *arg1, const void *arg2 )
{
    if(*(int*)arg1 > *(int*)arg2)
    {
        return 1;
    }
    else {;return 0;}
}

void main()
{
    int a[9];
    a[0] = 27;
    a[1] = 11;
    a[2] = 25;
    a[3] = 34;
    a[4] = 45;
    a[5] = 0;
    a[6] = 44;
    a[7] = 14;
    a[8] = 26;
    printf("%d %d %d %d %d %d %d %d %d\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);
    qsort(&a, 9, sizeof(int), compare);
    printf("%d %d %d %d %d %d %d %d %d\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);
    getchar();
}
Почему этот код выводит такую интересную вещь:
27 11 25 34 45 0 44 14 26
26 11 25 14 27 0 34 44 45
т. е. сортировка не работает. Если я этот же код компильну в gcc, то сортировка пройдет на ура.
Замените в qsort 9 на 8 и все ок...

Хм... Это бага в моих генах, или в библиотечной реализации qsort у VS?

Добавлено через 5 минут 10 секунд
Блин, только что в 6.0 версии попробовал:
27 11 25 34 45 0 44 14 26
45 11 25 34 27 0 44 14 26
У меня есть шанс выздороветь?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2008, 00:18     qsort, рабочий день убит...
Посмотрите здесь:

qsort - C++
Вот код программы. Посмотрите вопрос в комментарии. #include &lt;iostream&gt; #include &lt;stdlib.h&gt; using namespace std; int main() ...

qsort C++ - C++
Помогите, плиз,разобраться с этой функцией, я прогу написала, но мало чего понимаю в ней, я написала в трех файлах, так и выкладываю. ...

qsort - C++
Ребят,расскажи подробно и простенько про qsort;Видел тему,но ничего не понял.Я новичек еще можно сказать пока в С++. у меня просто...

qsort - C++
читал, что с помощю QSORT можно упорядочить масив, но не пишет как. помогите!!

qsort - C++
Вот код: #include &lt;cstdio&gt; #include &lt;algorithm&gt; int compare(const void *s1, const void *s2) { return strcmp((char *)s1, (char...

Сортировка qsort - C++
Доброго времени суток, уже применял qsort для сортировки цифр, но не могу найти его для алфавита. Необходимо распределить предложения в...

не работает qsort - C++
Возникла проблема: в MSVS 2010 данный код выполняется неправильно, массив не сортируется,этот же код, скомпилированный в gcc работает как...

Функция Qsort - C++
Прошу ознакомить меня с функцией Qsort. Если можно, то не мудрено и на примерах. Спасибо.

Застопорился с qsort - C++
Суть задачи в следующем: Дан одномерный массив длиной N. Массив заполняется датчиком случайных чисел (лучше использовать любое...

qsort vs sort - C++
Собственно вопрос что лутше, в каких ситуациях, и почему , спасибо

Функция qsort - C++
Здравствуйте! Помогите пожалуйста отсортировать студентов с помощью функции qsort по &quot;age&quot; или другим критериям. Спасибо! #include...

Вопрос по ()qsort - C++
есть массив, который разбивает предложение на слова. надо отсортировать все слова в порядке возрастание длинны. язык С. заранее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
13.09.2008, 00:41     qsort, рабочий день убит... #2
Попробовал в шестой студии,результат тот же) сейчас,буду искать причину)

Добавлено через 3 минуты 48 секунд
Неправильно задана функция сравнения
Код
int compare( const void *arg1, const void *arg2 )
{
    if(*(int*)arg1 > *(int*)arg2)  return 1;// если arg1 больше - положительное целое
    if(*(int*)arg1 < *(int*)arg2) return -1;//если меньше - отрицательное
    return 0;// если равно - ноль
}
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
13.09.2008, 00:45  [ТС]     qsort, рабочий день убит... #3
Ага, вот и меня это улыбнуло. Хотя, в gcc все норм...
Сегодня я точно в дебагер не полезу, так как, устал уже). Надо завтра заняться, если не выяснится. Но сам факт забавляет...

Добавлено через 27 секунд
Ща попробуем...

Добавлено через 1 минуту 32 секунды
Во, блин. кривые мелкомягкие. Привычка к gcc Точно ведь, по-разному у них.

P. S. остается вопрос: почему тогда с 8-ю элементами всегда правильно?
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
13.09.2008, 00:46     qsort, рабочий день убит... #4
а у меня вот привычка к шестой студии.Думаю,лучше уж к gcc привыкнуть
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
13.09.2008, 00:57  [ТС]     qsort, рабочий день убит... #5
Хотя скорее, это внутренняя реализация qsort. Проходит по порядку так, что arg1 предыдущий относительно arg2. Тогда все будет работать. Думаю, поэтому. Эх, ладно. Тему закрываю. На фиг всю студию Спасибо за размыкание
Yandex
Объявления
13.09.2008, 00:57     qsort, рабочий день убит...
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru