Heapsort в C, выпуск индекса 0 - PullRequest
0 голосов
/ 29 апреля 2011

для школьного проекта. Я решил решить проблему путем кодирования HeapSort, но у меня есть проблема. («вектор» - вектор для сортировки, а «n» - количество элементов в «векторе»)

Вот мой код:

void fixHeap(int position,int length)
{
    int next=2*position;
    int temp;

    while (next<=length)
    {
        if (next<length && vector[next]<vector[next+1])
        {
            next++;
        }
        if (vector[position]<vector[next])
        {
            temp=vector[position];
            vector[position]=vector[next];
            vector[next]=temp;
            position=next;
            next=2*position;
        }
        else
        {
            return;
        }
    }
}

void heapSort()
{
    int counter;
    int temp;

    for(counter=(n-1)/2;counter!=0;counter--)
    {
        fixHeap(counter,n-1);
    }
    for(counter=n-1;counter>0;counter--)
    {
        temp=vector[counter]; 
        vector[counter]=vector[0];
        vector[0]=temp;
        fixHeap(0,counter-1);
    }
    display();
}

Когда я делаю fixHeap (0, n-1), я ставлю рядом с 0, а затем позиция также на 0, поэтому я не правильно делаю Heap правильно. Может ли кто-нибудь помочь мне исправить это?

Также есть ли другие ошибки, которые вы заметили, которые я, возможно, упустил из виду?

1 Ответ

1 голос
/ 29 апреля 2011

Дочерние элементы i-го узла находятся в 2 * i и 2 * i + 1. Но если вы хотите отсортировать каждый элемент в массиве, 1-й узел имеет индекс 0. Необходимо соответствующим образом исправить вычисления индекса дочернего узла.

...