Реализация быстрой сортировки со значениями двойного типа - PullRequest
0 голосов
/ 14 ноября 2011

Мне нужно создать программу, которая принимает входной файл с несортированными номерами и выводит другой файл с отсортированными номерами с помощью быстрой сортировки.Эта программа работала нормально в нескольких тестовых случаях с использованием целых чисел.Однако, когда я изменяю формат массива с 'int' на 'double', моя программа не может правильно отсортировать значения.Больше всего меня смущает то, что это противоречиво.Например, вход «5,4,3,2,2.1» работает нормально, но вход «5,4,3,2.2,2.1» вызывает ошибку сегмента.Любая помощь будет оценена.Спасибо.

void swap(double *x, double *y)
{
   double tmp;
   tmp = *x;
   *x = *y;
   *y = tmp;
}

int pivot(int i, int j)
{
   return ((i+j)/2); 
}

void quickSort(double values[], int low, int high)
{
   int start;
   int end;
   int k;
   int p;


  if (low < high)
  {
     p = pivot(low,high);
     swap(&values[low],&values[p]);
     k = values[low];
     start = (low+1);
     end = high;

     while (start <= end)
     {
        while ((start <= high) && (values[start] <= k))
        {
           start++;
        }
        while ((end >= low) && (values[end] > k))
        { 
           end--;
        }
        if (start < end)
        {
           swap(&values[start],&values[end]);
        }
     }
     swap(&values[low],&values[end]);
     quickSort(values,low,(end-1));
     quickSort(values,(end+1),high);
  }
}

int main()
{
   ...
   quickSort(array, 0, (size+1);
   ...
   return 0;
}

Ответы [ 2 ]

2 голосов
/ 14 ноября 2011

Я думаю, что k здесь должно быть удвоено :) 100 *

1 голос
/ 14 ноября 2011

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

void quickSort(double values[], double low, double high)
{
    int start;
    int end;
    double k;
    double p;
    ...

Быстрый аудит типов данных, вероятно, решит вашу проблему:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...