格尔特西斯面试笔试题.docVIP

  • 8
  • 0
  • 约 10页
  • 2016-12-25 发布于河南
  • 举报
编程题: 编程实现堆排序 /* 堆排序思想: 首先把数组看成是一个无序的堆结构,然后首先把数组构建成大根堆,及所有父节点不小于他的两个子节点。 构建的大根堆的特点是顶点值一定不小于所有子节点的值。 然后把大根堆的顶点,也就是数组第一个元素值和堆的尾节点值交换。 这样最大值就一定最后面。尾节点之前的堆结构就失去大根堆特性了,然后需要重新构建大根堆(除了尾节点以外,因为尾节点已经有顺序了,为最大值) 然后再次交换顶点和倒数第二个堆节点的值,然后再重构大根堆(除堆结尾已经交换过的值)。 重复上面步骤,直到只有最顶层的堆节点,这时候整个堆结构为一个递增的数组序列(虽然堆已经不是大根堆了)。 整个算法的核心就是构建大根堆(heap_ex函数实现),其中要注意堆节点和数组键,堆节点从1开始,数组键从0开始。 整个堆排序代码如下: */ #include stdio.h void swap(int *a, int *b); void print_arr(int *arr, int arr_len); void heap_build(int *arr, int note, int arr_len); void heap_sort(int *arr, int note, int arr_len); void heap_ex(int *arr, int i, int arr_end); int ma

文档评论(0)

1亿VIP精品文档

相关文档