Вообщем проблема в том, что при сортировке массива из 6 элементов, один элемент теряется. Пробовал для массива из 4,5,7,8,9 элементов работает. В чем ошибка?
void qSort( int *x, int N ){
int i = 0, j = N;
int temp, p;
p = x[N>>1];
do{
while( x[i] < p ) i++;
while( x[j] > p ) j–;
if ( i <= j ){
temp = x[i];
x[i] = x[j];
x[j] = temp;
i++;
j–;
}
} while ( i <= j );
if ( j > 0 ) qSort ( x, j );
if ( N > i ) qSort ( x + i, N – i );
}
11 ноября 2009 в 12:02
stl::qsort()
10 ноября 2009 в 21:02
ААА, в первом посте же написал
=================
ошибка м.б. в том, что если массив у тебя длины N,
то эту функцию надо вызывать qSort( x, N-1)
++++++++++++++++++
Т.е. надо писать qSort( a, 5)
Так работает все.
10 ноября 2009 в 21:02
Спасибо ребята огромное!
10 ноября 2009 в 21:01
А можешь всю программу привести(с main-ом и т.д.)?
10 ноября 2009 в 21:01
спасибо конечно за код. а насчет моего не знаешь почему такое может быть? может просто надо не do while, а while/
10 ноября 2009 в 21:01
ща
10 ноября 2009 в 21:01
int main()
{
int a[10];
for ( int i = 0; i < 6; i++ ){
a[i] = rand()/100000;
cout << a[i] << "";
}
qSort(a, 6);
cout << endl << endl;
for ( int i = 0; i < 6; i++ )
cout << a[i] << "";
return 0;
}
10 ноября 2009 в 21:01
первый элемент, который смотрится в строчке while( x[j] > p ) j–; у Вас за пределами массива. получается сравнивается x[6] с чем-то.
10 ноября 2009 в 21:00
вот что еще заметил, что когда 6 елементов заполняю рандомно, то олин пропалает, а когда допустим определенными значениями, то не пропадает.
10 ноября 2009 в 21:00
У меня есть работающий вариант,
правда тут передаются индексы начала и конца:
void Sort( int* x,
int begin, int end)
{
if ( begin >= end )
{
return;
}
int i = begin, j = end;
int m = x[begin + rand() % (end - begin + 1)];
int tmp;
while ( i <= j )
{
while ( x[i] < m ) ++i;
while ( x[j] > m ) –j;
if ( i <= j )
{
tmp = x[i];
x[i] = x[j];
x[j] = tmp;
++i;
–j;
}
}
Sort( x, begin, j);
Sort( x, i, end);
}
10 ноября 2009 в 21:00
while ( x[i] < m ) ++i;
while ( x[j] > m ) –j;
если знаки наоборот поставить, то будет сортировать поубыванию?
10 ноября 2009 в 21:00
Какие знаки? <>? Вообще да.
10 ноября 2009 в 21:00
я знаки поменял в своем коде, у меня перестало работать для массивов с четным числом элементов.
10 ноября 2009 в 21:00
ага
10 ноября 2009 в 20:05
А что значит пропадает? Меняется на какой-то другой?
Вроде на первый взгляд все правильно,
ошибка м.б. в том, что если массив у тебя длины N,
то эту функцию надо вызывать qSort( x, N-1)
10 ноября 2009 в 20:05
заполнил массив5; 4; 5; 4; 5.
отсортировало все правильно! =)
10 ноября 2009 в 20:05
пропадает, ну типа как обычно когда вылазеет за пределы памяти, то там всякая чушь с минусом получается.
10 ноября 2009 в 20:04
нет я заполнял
rand();
10 ноября 2009 в 20:04
введи вручную последовательность, скажем… 5,5,5,5,5, скорей всего программа будет работать неправильно. у Вас не определено что вы делаете с одинаковыми элементами.
10 ноября 2009 в 20:03
там в последовательности из 6 элементов были равные?)))