С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

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

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

13.09.2008, 00:18. Просмотров 4399. Ответов 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
У меня есть шанс выздороветь?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2008, 00:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос qsort, рабочий день убит... (C++):

Почему все считают, что qsort - НЕ из STL? - C++
Странно, что qsort не относят к STL!? Ведь qsort определена в библиотеке cstdlib: C Standard General Utilities Library У кого какие...

Начав тренировки, лыжник в первый день пробежал 10км. Каждый следующий день он увеличивал пробег на 10% от пробега предыдущего... - C++ Builder
Начав тренировки, лыжник в первый день пробежал 10км. Каждый следующий день он увеличивал пробег на 10% от пробега предыдущего Определить: ...

Написать программу которaя запрашиваeт у пользователя номер дня недели, затем выводит одно из сообщений "рабочий день", "суббота", "воскресенье" - C++
Добрый день необходимо написать несколько программ, кто может помогите. одна тема - одна задача!

Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день","Суббота" или "Воскресенье" - C++
Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: &quot;Рабочий день&quot;,&quot;Суббота&quot; или...

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

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

4
XuTPbIu_MuHTAu
Эксперт С++
2228 / 743 / 10
Регистрация: 27.05.2008
Сообщений: 1,498
13.09.2008, 00:41 #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;// если равно - ноль
}
1
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
13.09.2008, 00:45  [ТС] #3
Ага, вот и меня это улыбнуло. Хотя, в gcc все норм...
Сегодня я точно в дебагер не полезу, так как, устал уже). Надо завтра заняться, если не выяснится. Но сам факт забавляет...

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

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

P. S. остается вопрос: почему тогда с 8-ю элементами всегда правильно?
0
XuTPbIu_MuHTAu
Эксперт С++
2228 / 743 / 10
Регистрация: 27.05.2008
Сообщений: 1,498
13.09.2008, 00:46 #4
а у меня вот привычка к шестой студии.Думаю,лучше уж к gcc привыкнуть
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
13.09.2008, 00:57  [ТС] #5
Хотя скорее, это внутренняя реализация qsort. Проходит по порядку так, что arg1 предыдущий относительно arg2. Тогда все будет работать. Думаю, поэтому. Эх, ладно. Тему закрываю. На фиг всю студию Спасибо за размыкание
0
13.09.2008, 00:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2008, 00:57
Привет! Вот еще темы с ответами:

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

Рабочий день - Delphi
Народ дико извиняюсь,но я застрял.Нужна помощь в написании программы.А задача следующая: написать программу которая запрашивает номер дня...

выходной или рабочий день - Pascal
для любого числа текущего месяца определить - выходной или рабочий день или выдать сообщения о том, что в етом месяце такого числа нет.. ...

Распределить рабочий день по обязанностям - MS Excel
Здравствуйте! Помогите мне, пожалуйста, в моей ситуации. У меня есть таблица с обязанностями со штатными единицами, мне надо распределить...


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

Или воспользуйтесь поиском по форуму:
5
Закрытая тема Создать тему
Опции темы

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