堆排序的基本实现


空白AdjustHeap (int *, int, int根)//建最大堆

{

如果(==NULL)

{

返回;

}

int孩子=根* 2 + 1;


, (child<大小)

{

如果((孩子+ 1)& lt;大小,,(孩子)& lt;[孩子+ 1])

{

+ +孩子;

}

如果((根)& lt;[孩子])

{

交换((孩子),[根]);

}

根=孩子;

子=根* 2 + 1,

}

}

空白Adjustdown (int *, int, int根)//向下调整,将堆顶的数据换到堆底后把长度减一;

{,,,,,,,,,,,,,,//再将堆顶数据向下比较,建成最大堆,,,

int孩子=根* 2 + 1;


,(孩子& lt;大小)

{

如果((孩子+ 1)& lt;大小,,(孩子)& lt;[孩子+ 1])

{

+ +孩子;

}

如果((孩子)比;(根))

{

交换((孩子),[根]);

}

根=孩子;

子=根* 2 + 1,

}

}

空白堆排序(int *, int长度)

{

如果(==NULL | | & lt;长度=0)

{

返回;

}

(int i=(- 2)长度/2;我在=0;我——)

{

AdjustHeap(长度,i);

}

(int i=- 1长度;我在;0;我——)

{

int tmp=[0];

[0]=[我],

[我]=tmp;

Adjustdown(我,0),

}

}


堆排序的基本实现