Быстрая сортировка кода в C, необъяснимое поведение на 64-битной машине Windows

void quicksort(float x[],int first,int last)
{
float temp;int  j, pivot, i;

if(first<last){
pivot=first;
i=first;
j=last;
while(i<j){
while(x[i]<=x[pivot]&&i<last)
i++;
while(x[j]>x[pivot])
j--;
if(i<j){
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}

temp=x[pivot];
x[pivot]=x[j];
x[j]=temp;
quicksort(x,first,j-1);
quicksort(x,j+1,last);
}
}

main()
{
float a[]={4.0,6.0,8.5,9.1,6,11.1,1.1};
//int len=6;
int len=7;
quicksort(a,0,len);
int i=0;
for(i=0;i<len;i++)
printf("%d\n",a[i]);
}

Во время выполнения на кодовых блоках печатает бред, и цикл не заканчивается после 7 итераций, выполнение продолжается до тех пор, пока в конце не произойдет ошибка сегментации.
компиляция с помощью gcc в командной строке не помогает.

но работает нормально на моем пользовательском тесте codeforces, ИСПОЛЬЗУЯ GNU C ++ 4.7, т. е. он заканчивается после 7-кратной распечатки. но дает

Ошибка выполнения: код выхода 11

при использовании GNU C 4

Как решить это?

0

Решение

Вы пытаетесь напечатать floatс помощью %d спецификатор, который для целых чисел. Пытаться

printf("%f\n", a[i]);

вместо.

2

Другие решения

Есть два вопроса с вашим кодом:

  1. Как уже упоминалось @Chowlett, для печати с плавающей точкой необходимо использовать %fне %dи это покрывает гибришскую часть …
  2. Поскольку размер массива равен 7, последний индекс равен 6, а не 7, и это, вероятно, охватывает часть сбоя.
4

По вопросам рекламы [email protected]