QSORT на массив в C? - PullRequest
       3

QSORT на массив в C?

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

Если у меня есть такой массив:

2, 4, 6, 0, 0, 0, 0, 0, 0
  1. Есть ли способ использовать qsort, отсортировав только первые 3 элемента и оставив остальные нетронутыми?
  2. Будет ли qsort(arrNumbers, 3, sizeof(int), compare) выполнять работу?
  3. Приводит ли указание количества элементов, меньшего, чем полный массив, к сортировке только такого количества элементов?

РЕДАКТИРОВАТЬ: Моя функция сравненияэто:

int comp(const int * a, const int * b)
   if(a==b)
   {
       return 0;
   }
   else
   {
      if(a<b)
      {
         return -1;
       }
       else
       {
         return 1;
       }
    }

Это кажется правильным?

Ответы [ 4 ]

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

Да.

Да. *

Да.


* Если вы правильно определите compare().
2 голосов
/ 14 ноября 2011

Полная подпись:

void qsort(
   void * base,
   size_t num,
   size_t width,
   int (__cdecl *compare )(const void *, const void *) 
);

Чтобы отсортировать определенный непрерывный диапазон массива, вы просто передаете другой base (указатель на начальный элемент для диапазона) и num (количество элементов в диапазоне).

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

Почему бы вам не попробовать и не увидеть, что это работает так, как вы ожидаете?

Объяснение: функция qsort получает только указатель на массив, который не говориткак долго массивВот почему вы должны также передать размер.В своем вызове функции вы утверждаете, что длина массива составляет три int с, и это все, в чем функция qsort может быть уверена.Он не получит доступ к чему-либо за пределами этого предела.

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

Да, если вы укажете 3 в вашем случае, он будет сортировать только первые 3 элемента.

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