博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
堆排序 简单实现
阅读量:3526 次
发布时间:2019-05-20

本文共 1696 字,大约阅读时间需要 5 分钟。

#include 
//#include
//#include
#define N 10/* * 堆大小 * */int heapSize = 0;/* * 返回左子节点索引,root_index 堆顶索引 * */int left_child_index(int root_index){ return ((root_index << 1) + 1);}/* * 返回右子节点索引,root_index 堆顶索引 * */int right_child_index(int root_index){ return ((root_index << 1) + 2);}void swap(int *x,int *y){ int tmp = *x; *x = *y; *y = tmp;}void show(int arr[],int len){ int i; for(i = 0; i < len; i++) printf("%3d",arr[i]); printf("\n");}void maxHeapify(int arr[],int root_index){ int largest = 0; int left = left_child_index(root_index); int right = right_child_index(root_index); /* * 把largest赋值为推顶和其左子节点中较大的 * */ if((left <= heapSize) && (arr[left] > arr[root_index])) largest = left; else largest = root_index; /* * 把largest赋值为推顶和其右子节点中较大的 * */ if((right <= heapSize) && (arr[right] > arr[largest])) largest = right; /* * 此时largest 是堆顶,左子节点,右子节点三者中最大的 * */ if(largest != root_index) { /* * 如果堆顶不是最大的,则交换,并递归调整 * */ swap(&arr[largest],&arr[root_index]); maxHeapify(arr,largest); }}/* * 初始化堆,将数组中每一个元素放到合适的位置 * 完成后,堆顶元素为数组中最大的数 * */void buildMaxHeap(int arr[],int len){ int i; heapSize = len; /* * i表示堆顶高度 * */ for(i = (len >> 1); i >= 0; i--) maxHeapify(arr,i);}void heap_sort(int arr[],int len){ buildMaxHeap(arr,(len - 1)); int i; for(i = (len - 1); i >= 1; i--) { /* * 堆顶元素arr[0] 被置换到数组尾部arr[i] * */ swap(&arr[0],&arr[i]); /* * 从堆中移除改元素 * */ heapSize--; /* * 重建堆,先默认第一个元素就是最大 * */ maxHeapify(arr,0);#ifdef DEBUG show(arr,N);#endif }}int main(){ srand(time(0)); int i; int arr[N] = {-1}; for(i = 0; i < N; i++) arr[i] = rand() % 101; show(arr,N); heap_sort(arr,N); show(arr,N);}此为大根排序,小跟排序52,60行改成小于即可,编译时定义DEBUG可以看到排序的过程

转载地址:http://xxuhj.baihongyu.com/

你可能感兴趣的文章
dubbo入门
查看>>
http 错误类型
查看>>
一篇文章解决HTTP 请求头!
查看>>
学习日记02
查看>>
学习日记03
查看>>
学习日记04
查看>>
学习日记08(元组、字典、集合)
查看>>
js自定义数据顺序进行升序或者降序排序
查看>>
【零】简单数仓框架优化、配置及基准测试
查看>>
【零】Linux中MySQL安装
查看>>
Sqoop的安装及测试
查看>>
Kylin的简单使用
查看>>
Presto的概念和安装使用
查看>>
Druid的Web页面使用
查看>>
Scala-HelloWorld
查看>>
Scala-IDEA中环境部署
查看>>
Scala-HelloWorld解析
查看>>
Scala-变量和数据类型
查看>>
Scala-流程控制
查看>>
Scala-面向对象后章
查看>>