堆排序测试
/堆排序测试/
void printheap (int arr[],int length) {
for(int i=0;i<length;i++) {
cout<<arr[i]<<" ";
}
cout<<endl;
}
void swapheap (int arr[],int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
void heapAdjust(int arr[],int index,int length) {
int max;//辅助下标
int lchild = index2 + 1; //左孩子
int rchild = index2 + 2; //右孩子
max = index;
if(lchild < length && arr[lchild] > arr[max]) {
max = lchild;//如果左孩子大于arr[max],max指向左孩子
}
if(rchild < length && arr[rchild] > arr[max]) {
max = rchild;//如果右孩子大于arr[max],max指向右孩子
}
if(max != index) {
swapheap(arr,max,index); //max和index不相等,根结点有调整,把最大值放到根上
heapAdjust(arr,max,length);//递归调整max位置,把最大值放到下个根结点上
}
}
void heapSort(int arr[], int length) {
// int length = sizeof(arr)/sizeof(int);
for (int i = length/2 - 1;i >= 0; i--) {
heapAdjust(arr,i,length); //从最后一个根结点往前依次递归排成大顶堆
}
for(int i = length -1;i >= 0; i--) {
swapheap(arr,0,i);//目前已经是大顶堆,把堆顶同最后一个元素交换
heapAdjust(arr,0,i-1);//然后从顶堆开始递归调整堆成为大顶堆,每次最后一个数不参与调整
}
}
void test15() {
cout << “--------test 堆排序--------” << endl;
int arr[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
int length = sizeof(arr)/sizeof(int);
printheap(arr,length);
heapSort(arr,length); // 注意数组下标是从0开始的
printheap(arr,length);
}
extern “C” void app_main(void)
{
test15();
}