Что не так с моим кодом? Это BubbleSort с использованием рекурсии в C - PullRequest
0 голосов
/ 12 января 2019

Возникла проблема, когда я вызываю массив рекурсивных функций сортировки пузырьков не сортируется.

#include"stdio.h"
void bubble(int *arr,int n,int vidx){
if(n==0)
    return;
if(vidx == n)
    bubble(arr,n-1,0);
    return;
if(*(arr+vidx) > *(arr+vidx+1)){
    int temp = *(arr+vidx);
    *(arr+vidx) = *(arr+vidx+1);
    *(arr+vidx+1) = temp;
    bubble(arr,n,vidx+1);
    return;
    }
 } int main(){
      int a[] = {5,4,3,2,1};
      bubble(&a,5,0);
      for(int i = 0 ; i < 5 ; i++)
         printf("%d,",a[i]);
      return 0; }

Фактический объем производства: 5,4,3,2,1,

Ожидаемый результат: 1,2,3,4,5,

1 Ответ

0 голосов
/ 12 января 2019
if(vidx == n)
    bubble(arr,n-1,0);
    return;

Вот почему я рекомендую всегда , используя фигурные скобки. Как есть, этот код эквивалентен:

if(vidx == n){ bubble(arr,n-1,0); }
return;

Большая часть тела функции bubble недоступна.

Редактировать: Кстати, я заметил еще две ошибки в том, что осталось:

  • vidx может доходить до длины массива, поэтому vidx+1 будет индексироваться после конца, что может вызвать проблемы
  • Когда вы ударяете два соседних элемента, которые находятся в правильном порядке по отношению друг к другу (т.е. *(arr+vidx) <= *(arr+vidx+1)), вы добираетесь до конца функции, не возвращаясь далее, преждевременно останавливая сортировку.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...