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

0
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

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

Теги:
exit-code

2 ответа

2
Лучший ответ

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

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

вместо.

4

В коде есть две проблемы:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню