Вопрос новичка C - PullRequest
       13

Вопрос новичка C

1 голос
/ 01 ноября 2009

я пытаюсь понять код, что именно &(ipA[iLower + 1] означает в следующем коде (функция разбиения быстрой сортировки?

void Partition(int* ipA, int iSize) {

    // Partitions of size 0 or 1 are already sorted
    if (iSize <= 1) {
        return;
    }

    // Select a pivot from the array randomly
    int iPivot = ipA[rand() % iSize];

    // Indices of the entries to be swapped
    int iLower = 0;
    int iUpper = iSize - 1;

    // Partition array into sections above and below the pivot
    while (iLower < iUpper) {

        while (ipA[iLower] < iPivot) {
            ++iLower;
        }

        while (ipA[iUpper] > iPivot) {
            --iUpper;
        }

        // Swap the entries at the lower and upper indices
        int iTemp       = ipA[iLower];
        ipA[iLower]     = ipA[iUpper];
        ipA[iUpper]     = iTemp;
    }

    // Recursively call partition on each partititon.
    Partition(ipA, iLower);
    Partition(&(ipA[iLower + 1]), iSize - iUpper - 1);
}

1 Ответ

2 голосов
/ 01 ноября 2009

Метод Partition вызывается из Partition каждый раз, когда передаваемый массив разделяется на два массива: один из начала текущего массива и один из индекса iLower + 1.

& означает адрес (указателя), поэтому вызов & (ipA [iLower + 1] подобен вызову нового массива (указателя в C / C ++) с адреса ячейки в ipA по индексу iLower + 1).
Поскольку передача массивов в C выполняется путем передачи указателя на их начало, он эффективно передает массив, начинающийся с этого адреса.

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