堆排序
来源:互联网 发布:网络上有重名上不去网 编辑:程序博客网 时间:2024/05/16 17:13
/*堆排序*/#include<stdio.h>#define MAXSIZE 50typedef int KeyType;typedef struct /*数据元素类型定义*/{ KeyType key; /*关键字*/}DataType;typedef struct /*顺序表类型定义*/{ DataType data[MAXSIZE]; int length;}SqList;void InitSeqList(SqList *L,DataType a[],int n)/*顺序表的初始化*/{ int i; for(i=1;i<=n;i++) { L->data[i]=a[i-1]; } L->length=n;}void DispList(SqList L,int n)/*输出表中的元素*/{ int i; for(i=1;i<=n;i++) printf("%4d",L.data[i].key); printf("\n");}void CreateHeap(SqList *H,int n) /*建立大顶堆*/{ int i; for(i=n/2;i>=1;i--) /*从序号n/2开始建立大顶堆*/ AdjustHeap(H,i,n);}void AdjustHeap(SqList *H,int s,int m) /*调整H.data[s...m]的关键字,使其成为一个大顶堆*/{ DataType t; int j; t=(*H).data[s]; /*将根结点暂时保存在t中*/ for(j=2*s;j<=m;j*=2) { if(j<m&&(*H).data[j].key<(*H).data[j+1].key) /*沿关键字较大的孩子结点向下筛选*/ j++; /*j为关键字较大的结点的下标*/ if(t.key>(*H).data[j].key) /*如果孩子结点的值小于根结点的值,则不进行交换*/ break; (*H).data[s]=(*H).data[j]; /*将根结点插入到正确位置*/ s=j; } (*H).data[s]=t;}void HeapSort(SqList *H) /*对顺序表H进行堆排序*/{ DataType t; int i; CreateHeap(H,H->length); /*创建堆*/ for(i=(*H).length;i>1;i--) /*将堆顶元素与最后一个元素交换,重新调整堆*/ { t=(*H).data[1]; (*H).data[1]=(*H).data[i]; (*H).data[i]=t; AdjustHeap(H,1,i-1); /*将(H).data[1...i-1]调整为大顶堆*/ }}main(){ DataType a[]={56,22,67,32,59,12,89,26,48,37}; int i,n=10; SqList L; InitSeqList(&L,a,n); printf("排序前:"); DispList(L,n); HeapSort(&L); printf("堆排序结果:"); DispList(L,n);}
程序运行结果
阅读全文
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- 转:oracle connect by level start with使用
- 遍历Hashmap的四种方式
- 全球互联网技术大会GITC2017再次走进上海!
- 常用数据类型取值范围
- Kerberos简介
- 堆排序
- 安装vmware-tools出现"what is the location of the "ifconfig"program on your machine?"
- Intellij idea 的maven项目如何通过maven自动下载jar包
- eclipse中插件windowBuilder的使用
- php关键字区分
- Android_View与Activity的转化
- list四种遍历方式
- 剑指Offer(第二版)面试题16:数值的整数次方
- 文章标题