Сортировка массива с помощью указателей - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь отсортировать числа в массиве в порядке убывания с помощью указателей.То, что у меня есть сейчас, - это просто распечатывать числа без их сортировки.Как мне получить функцию сортировки чисел?

void new_sort(int nums[], int count) {
 int round; 
 int i;
 int inorder;

  int temp;
  int *num_ptr = nums;

  inorder=0;

  for (round = count -1; (round>0)&&(!inorder); round--) {
     inorder=1;
     for(i=0; i<round; i++) {
        if (*num_ptr<*(num_ptr+1)) {
           inorder = 0;
           temp = *num_ptr;
           *num_ptr = *(num_ptr+1);
           *(num_ptr+1) = temp;
        }
    }
  }
}

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Вы только когда-либо смотрите на *num_ptr и *(num_ptr+1). Вы должны использовать i или «двигать» указатель по ходу движения.

0 голосов
/ 16 апреля 2019

Как указал John3136 , вы всегда проверяете, чтобы первый элемент был меньше, чем следующий.Я предположил, что вы не хотите использовать индексирование случайных массивов, поэтому я выбрал решение, использующее указатели.Я не сильно изменил ваш код, я просто использовал указатели вместо используемых вами счетчиков.Я проверил его с помощью массива, и я думаю, что другие части вашего кода работают нормально!

void new_sort(int* const nums, int count) {
    int* const end_ptr = nums + count;
    int* round;
    int inorder;

    int temp;

    inorder = 0;
    int* num_ptr;
    for (round = end_ptr - 1; round != nums && (!inorder); round--) {
        inorder = 1;
        for (num_ptr = nums; num_ptr != round; num_ptr++) {
            if (*num_ptr < *(num_ptr + 1)) {
                inorder = 0;
                temp = *num_ptr;
                *num_ptr = *(num_ptr + 1);
                *(num_ptr + 1) = temp;
            }
        }
    }
}

int main()
{
    int nums[] = { 10, 4, 7, 5, 4, 3, 2, 7, 8, 9, 11, 23, 1 };
    new_sort(nums, sizeof(nums) / sizeof(*nums));

    return 0;
}

Надеюсь, это поможет вам.Ура!

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