堆排序的另一种思路
来源:互联网 发布:邮箱服务器域名怎么看 编辑:程序博客网 时间:2024/04/28 21:33
//堆排序的另一种思路,并非原地排序,而是再开一个数组记录sortdate的序号,将sortdate的序号进行排序
//对于要了解是原数组的哪一个元素排在首位,或了解某个元素在原数组的位置与排序后的位置
//算法导论的“6.5-8”的最小堆的k路合并可以用此思路,要知道到底是哪一个元素排在首位,再search一遍就不好了
#include<stdio.h>#include<string.h>void exchange(int *p,int *q);void MaxHeapify(int sort[],int i,int heapsize,int rec[]);void BuildHeap(int sort[],int heapsize,int rec[]);void Maxsort(int sort[],int heapsize,int rec[]);int main(){ int f; int rec[10]={0,1,2,3,4,5,6,7,8,9};//此为记录数组rec[0]为最大元素 int sort[10]={4,1,3,2,16,9,10,14,8,7}; int heapsize=10; Maxsort(sort,heapsize,rec); for(f=0;f<10;f++) printf("%d \n",sort[rec[f]]);}void exchange(int *p,int *q){ int t; t=*p; *p=*q; *q=t;}void MaxHeapify(int sort[],int i,int heapsize,int rec[]){ int largest; if(2*i+1<heapsize&&sort[rec[2*i+1]]>sort[rec[i]]) largest=2*i+1; else largest=i; if(2*i+2<heapsize&&sort[rec[2*i+2]]>sort[rec[largest]]) largest=2*i+2; if(largest!=i) { exchange(&rec[i],&rec[largest]);//序号的交换,代替元素交换 MaxHeapify(sort,largest,heapsize,rec); }}void BuildHeap(int sort[],int heapsize,int rec[]){ int i; for(i=heapsize/2-1;i>=0;i--) { MaxHeapify(sort,i,heapsize,rec); }}void Maxsort(int sort[],int heapsize,int rec[]){ BuildHeap(sort,heapsize,rec); heapsize=heapsize-1; while(heapsize>=1) { exchange(&rec[0],&rec[heapsize]); MaxHeapify(sort,0,heapsize,rec); heapsize--; }}
- 堆排序的另一种思路
- 选择排序的另一种思路
- c++ 堆排序的思路
- 全局变量的另一种思路
- 另一种blast2go的思路
- 堆排序算法思路详解
- C#中程序控制输入法的另一种思路
- 开启single-tap - 解决问题的另一种思路
- 解决线程安全的另一种思路
- seam中另一种上传下载的实现思路
- ZOJ 2481的另一种解题思路
- Android 多次点击的另一种思路
- 冒泡排序的另一种写法
- 背包问题:另一种思路
- 1-100不重复随机数的另一种思路
- wiredep----另一种思路的前端模块加载方式
- 自动接听电话的另一种思路(只需要root权限)
- 另一种思路比较2个日期是否相等的方式
- Eclipse 在开发中使用到的快捷键
- PHPStorm2.1 注册码和常用快捷键
- hdu 1032
- 局域网dos命令集
- 关于创业,最成功的idea,初期大多找不到投资人
- 堆排序的另一种思路
- spi test
- pl/sql中设置自动提示
- 从JAVA、C#转来学iphone开发的进来看看
- Cliqz:最具创新的信息发现阅读应用
- 递归实现DOM解析任何XML文档
- Linux DM9000网卡驱动程序完全分析
- android之 ActivityManagerService
- javascript的转换特殊字符为HTML实体字符