ESP-IDF:堆排序测试

堆排序测试

/堆排序测试/
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 = index
2 + 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();
}

结果:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值