Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.72
Vourhey
Почетный модератор
6491 / 2265 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
#1

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

13.09.2008, 00:18. Просмотров 4428. Ответов 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?
Странно, что qsort не относят к STL!? Ведь qsort определена в библиотеке...

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

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

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

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

qsort
Ребят,расскажи подробно и простенько про qsort;Видел тему,но ничего не понял.Я...

4
XuTPbIu_MuHTAu
Эксперт С++
2234 / 749 / 25
Регистрация: 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
Почетный модератор
6491 / 2265 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
13.09.2008, 00:45  [ТС] #3
Ага, вот и меня это улыбнуло. Хотя, в gcc все норм...
Сегодня я точно в дебагер не полезу, так как, устал уже). Надо завтра заняться, если не выяснится. Но сам факт забавляет...

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

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

P. S. остается вопрос: почему тогда с 8-ю элементами всегда правильно?
0
XuTPbIu_MuHTAu
Эксперт С++
2234 / 749 / 25
Регистрация: 27.05.2008
Сообщений: 1,498
13.09.2008, 00:46 #4
а у меня вот привычка к шестой студии.Думаю,лучше уж к gcc привыкнуть
0
Vourhey
Почетный модератор
6491 / 2265 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
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
Вот код: #include &lt;cstdio&gt; #include &lt;algorithm&gt; int compare(const void...

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

Получить прошлый рабочий день
Доброго времени суток. Товарисчи, есть нужда-получать в ячейку вчерашний...

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


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

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

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