отладка в VS Studio как отобразить весь массив - PullRequest
0 голосов
/ 09 мая 2020

Я отлаживаю программу C в VS Studio. Я скачал и успешно настроил MinGw. У меня проблема, при которой я не могу отобразить все содержимое int array[4] в окне отладки. мой массив A появляется в окне отладки. Я дважды щелкаю по нему, но отображается только первое значение 10. Любые предложения приветствуются (я попытался дважды щелкнуть по нему, записав в консоль отладки p A, как я бы сделал, используя GDB, но это не работает).

`

Я отлаживаю следующий код:

#include <stdio.h>
void quickSort(int * A, int p, int r);
int partition(int * A, int p, int r);

void quickSort(int * A, int p, int r)
{
    if(p < r)
    {
        int q = partition(A, p, r);
        quickSort(A, p, r); // first half
        quickSort(A, q + 1, r); // second half
    }
}

int partition(int * A, int p, int r)
{
    int x = A[r]; // x = key AKA pivot
    int i = p - 1;

    for(int j = p; j <= r-1; j++)
    {
        if(A[j] <= x)
        {
            i = i + 1;
            A[i+1] = A[j];
        }
    }
    A[i+1] = x;
    return i + 1;
}

ПРИМЕЧАНИЕ. Main () изображен ниже на снимке экрана: на прикрепленном снимке экрана ниже вы видите в WATCH, что я могу видеть только первое значение, 10, но массив содержит {10, 5, 7, 1}

debug

1 Ответ

1 голос
/ 09 мая 2020

Вы не меняете местами значения в функции partition в двух строках:

A[i+1] = A[j];

A[i+1] = x

Вы должны поменять местами значения с помощью функции swap:

void swap(int* a, int* b) 
{ 
    int t = *a; 
    *a = *b; 
    *b = t; 
}

затем в ваш код:

swap(&A[i], &A[j]); // A[i] not A[i+1] as you did in your code.
swap(&A[i+1], &A[r]);

В функции quickSort вы должны изменить на:

quickSort(A, p, q-1); // first half
quickSort(A, q + 1, r); // second half

Наконец, когда вы вызываете функцию quickSort, это должно быть:

quickSort(arr, 0, 3);

Потому что, 4 находится вне массива.

Полный код:

#include <stdio.h>
void quickSort(int * A, int p, int r);
int partition(int * A, int p, int r);
void swap(int* a, int* b) 
{ 
    int t = *a; 
    *a = *b; 
    *b = t; 
} 

void quickSort(int * A, int p, int r)
{
    if(p < r)
    {
        int q = partition(A, p, r);
        quickSort(A, p, q-1); // first half
        quickSort(A, q + 1, r); // second half
    }
}

int partition(int * A, int p, int r)
{
    int x = A[r]; // x = key AKA pivot
    int i = p - 1;

    for(int j = p; j <= r-1; j++)
    {
        if(A[j] <= x)
        {
            i = i + 1;
           swap(&A[i], &A[j]);
        }
    }
    swap(&A[i+1], &A[r]);
    return i + 1;
}

int main () {
    int arr[4] = {10, 5, 7, 1};

    quickSort(arr, 0, 3);
    for(int i = 0; i < 4; i++) {
        printf("%d\n", arr[i]);
    }
}

Результат теста:

1                                                                                                                       
5                                                                                                                       
7                                                                                                                       
10
...