堆排序(最小堆)

2015-05-22  本文已影响51人  希崽家的小哲
#include<iostream>
#define SIZE 123456
#define K 100
using namespace std;
void swap(int *a,int *b){
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}
void HeapAdjust(int array[],int i,int length)
{
    int left    = i*2;
    int right   = i*2+1;
    int largest = i;
    if (left<=length && array[left] < array[largest]) {
        largest     = left;
    }
    if (right<=length && array[right] < array[largest]) {
        largest     = right;
    }
    if (largest!=i) {
        swap(&array[largest], &array[i]);
        HeapAdjust(array, largest, length);
    }
}

void BuildHeap(int array[],int length)
{
    for (int i=length/2; i>=1; i--) {
        HeapAdjust(array, i, length);
    }
}

void HeapSort(int array[],int length)
{
    BuildHeap(array, length);
    for (int i=length; i>=2; i--) {
        swap(&array[i], &array[1]);
        HeapAdjust(array, 1, i-1);
    }
}
int main(){
    int test[] = {0,4,1,3,2,16,9,10,14,8,7};
    for(int i = 1; i <= 10; i++)
        cout<<test[i]<<"  ";
    cout<<endl;
    HeapSort(test,10);
    for(int i = 1; i <=10; i++)
        cout<<test[i]<<"  ";
    cout<<endl;
    return 0;
}

4 1 3 2 16 9 10 14 8 7
16 14 10 9 8 7 4 3 2 1
Program ended with exit code: 0

上一篇 下一篇

猜你喜欢

热点阅读