Объясните пожалуйста,почему не сортируются элементы??
вроде де бы все верно в коде..
*n=макс. размерность массива.
buf= временная переменная для хранения элемента массива.
while(is)
{
is=0;
for (i=*n;i<=0;i--)//пробывал ставить --,не помогло...
if (tabl1[i].sball<tabl1[i-1].sball)
{
buf=tabl1[i];
tabl1[i]=tabl1[i-1];
tabl1[i-1]=buf;
is=1;
}
}
Если я не ошибаюсь, то вместо is=1 надо поставить is=is+1;
Вот при таком коде минимум 2 раза произойдет выход за пределы массива: на первой итерации - при i = *n и попытке обратиться к tabl1[ i ] (индексы элементов массива меняются от 0 до n - 1), и на последней - при i = 0 и попытке чтения tabl1[i -1].
Приведи описания массива и заголовок функции сортировки...
для чего??)))там же цикл не по количественному значению,а по 0 или 1...
Добавлено через 2 мин.
struct my_s {
char FIO[max_name];
char prim[max_prim];
int vball;
int ekz[5];
int zach[3];
float sball;
};
my_s tabl1[max_s];
int* n=new int ;
void output_w(int *n,my_s tabl1[]).
В таком случае нельзя менять местами элементы структур так, как ты показал. Это не Паскаль, где записи можно без последствий присваивать друг другу, а С, где для этого надо использовать memcpy (или переопределять конструктор копирования/операцию присваивания для C++)...
хм..и как же мне написать сортировку?..
Не совсем понятно, зачем собственно ты выделяешь n динамически, что тебе это даст? Но если сделать n обычной переменной, то:
...
int n = ...;
int is = 1;
while(is) {
is = 0;
for (int i = n - 1; i > 0; i--)
if (tabl1[i].sball < tabl1[i-1].sball) {
my_s buf;
memmove((void*)(&buf), (void*)(&tabl1[i]), sizeof(my_s));
memmove((void*)(&tabl1[i]), (void*)(&tabl1[i - 1]), sizeof(my_s));
memmove((void*)(&tabl1[i - 1]), (void*)(&buf), sizeof(my_s));
is=1;
}
}
...