Метод "быстрой сортировки" массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, помогите разобраться с проблемой. Общее задание звучит так: написать программу, которая будет загружать массив из файла, сортировать его с помощью метода быстрой сортировки и записывать итоговый массив в файл. Я нашел метод, разобрался с ним, написал программу, начал тестировать, и как оказалось, есть ошибка, которую я не могу найти. Ошибка состоит в том, что при размере массива 3 или 6, массив сортируется, но как бы смещается на одно значение вперед, а с остальными размерностями сортировка работает правильно. Вот пример: Массив: 1 6 4 3 2 8 Получается массив: 0 1 2 3 4 6 Вот мой код:
void quickSort(int * a, int N) 
{    long i = 0, j = N;            
     int temp, p;
 
     p = a[ N/2 ];                
     do
     {
          while ( a[i] < p ) i++;
          while ( a[j] > p ) j--;
 
      if (i <= j)
      {
               temp = a[i]; a[i] = a[j]; a[j] = temp;
               i++; j--;
          }
     } while ( i<=j );
  if ( j > 0 ) quickSort(a, j);
  if ( N > i ) quickSort(a+i, N-i);
}
 
main()
{
   int a[10];
   FILE *f;
   char path[256];
   int i,n;
     printf("Введите путь к файлу с исходными данными: ");
     gets(path);
 
     f=fopen(path,"r");
     fscanf(f,"%d",&n);
     for (i=0;i<n;i++)
     fscanf(f,"%d",&a[i]);
     fclose(f);
     printf("Размер массива: %d",n);
     printf("\nМассив A:\n");
     for (i=0;i<n;i++)
     printf("%d ",a[i]);
     quickSort(a, n);
     printf("\nОтсортированный массив A:\n");
     for (i=0;i<n;i++)
     printf("%d ",a[i]);
     printf("\nВведите путь для записи результата: ");
     gets(path);
     f=fopen(path,"w");
     fprintf(f,"Полученный отсортированный массив А:\n");
     for (i=0;i<n;i++)
     fprintf(f,"%d ",a[i]);
     fclose(f);                           
}
Файл должен быть вида: размерность 1-эл 2-эл ... n-эл Пример: 6 1 6 4 3 2 8 Помогите пожалуйста найти и исправить ошибку, просто я уже все перепробовал и ничего не получается

Решение задачи: «Метод "быстрой сортировки" массива»

textual
Листинг программы
while ( a[j] > p ) j--;

Объяснение кода листинга программы

  1. Начинается цикл while, условием которого является выражение a[j] > p.
  2. В каждой итерации цикла значение переменной j уменьшается на единицу.
  3. Оператор -- используется для уменьшения значения переменной j на единицу.
  4. Цикл выполняется до тех пор, пока значение переменной a[j] больше значения переменной p.
  5. Когда условие становится ложным, цикл завершается.
  6. Значение переменной j в этот момент будет содержать индекс элемента, который необходимо поместить в начало массива для правильной сортировки.
  7. После завершения цикла выполняются дополнительные действия, которые не указаны в предоставленном коде.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы