C ++ массив не изменился, хотя и передается по ссылке

0

У меня есть следующий код для быстрого сортировки. Хотя массив передается по ссылке как в functions-, так и в quicksort, я не мог понять, почему измененный массив не отображается в результате. В какой-то книге я увидел, что прототип quicksort был определен внутри основной функции. Но это тоже не сработало. Также скажите, разрешено ли определять прототип другой функции внутри main.

#include <iostream>
void quicksort(int *,int,int);
int split(int *,int,int);    
using namespace std;
int main()
{
cout<<"\n Enter the 10 elements : ";
int n=10;
int a[10];    
for(int i=0;i<10;i++)
{
cin>>a[i];
}    

    quicksort(a,0,9);
    cout<<"\nThe sorted array is: ";
    for(int c=0;c<10;c++)
    {
        cout<<a[c]<<" ";
    }

    return 0;
}
void quicksort(int arr[],int lower,int upper)
{
int i;
    if(upper<lower)
    {
        i=split(arr,lower,upper);
        quicksort(arr,lower,i-1);
        quicksort(arr,i+1,upper);
    }
}
int split(int arr[],int lower, int upper)
{
    int i,a,b,temp;
    a=lower+1;
    b=upper;
    i=arr[lower];
    while(b>=a)
    {
        while(arr[a]<i)
            a++;
        while(arr[b]>i)
            b++;
        if(b>a)
        {
            temp=arr[a];
            arr[a]=arr[b];
            arr[b]=temp;
        }
    }

    temp=arr[lower];
    arr[lower]=arr[b];
    arr[b]=temp;
    return b;
}
  • 2
    Массив не передается по ссылке в вашем коде.
  • 0
    Подскажите пожалуйста как изменить.
Показать ещё 3 комментария
Теги:

2 ответа

1
Лучший ответ

Другая ошибка:

    while(arr[b]>i)
        b++;

должно быть

    while(arr[b]>i)
        b--;

Еще одна ошибка:

  while(arr[a]<i)
    a++;

должно быть:

  while(arr[a]<=i)
    a++;

вердикт: реализация алгоритма багги

4

Здесь ошибка:

if(upper<lower)

Поскольку upper сначала больше, чем lower, функция quicksort немедленно прекращается. Сравнение должно быть наоборот. (За исключением того, что программа segfaults, когда я пытаюсь это сделать, но это другая проблема.)

  • 0
    Как это может быть, я просто проверяю, содержит ли массив более одного элемента. Вы говорите мне, как это должно быть написано.
  • 0
    @AbhishekJain Ваш первый вызов быстрой сортировки проверит, если 9 <0, и больше ничего не будет делать.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню