堆排序(C语言版本)
来源:互联网 发布:linux下shell编程技巧 编辑:程序博客网 时间:2024/06/11 19:06
基本思想:堆排序是一种树形选择排序,是对直接选择排序的有效改进。首先建立堆,其次将堆顶与堆的最后一个位置交换,重复前两步。难点在与每次堆的建立。每次建立都从数组的索引位置 (length/2 - 1)开始 到索引位置0为止,<length为待堆排序的的数组部分的长度>,确保父节点的值大于它的左右两个儿子(可能只有一个),依次类推。注意:因为是倒的排序,所以不需要严格意义上的堆,只要保证在当前的父节点比它的儿子大就能满足要求。
代码:
#include<stdio.h>#include<windows.h>//针对堆进行调整void HeadAjust(int data[],int length){ int nChild; int nTemp; int flag; int i; i = (length/2-1); for(;i>=0;i=flag) { nTemp=data[i]; nChild = 2*i+1; if(nChild<length-1 && data[nChild+1]>data[nChild]) { nChild++; } if(nTemp<data[nChild]) { data[i] = data[nChild]; data[nChild] = nTemp; } flag = i - 1; } for(i=0;i<length;i++) { printf("%d\t",data[i]); } printf("\n\n");}//堆排序void HeadSort(int data[],int length){ int j; int temp; HeadAjust(data,length); for(j=length-1;j>0;--j) { temp = data[j]; data[j] = data[0]; data[0] = temp; HeadAjust(data,j); }}int main(){ int a[] = {46,79,56,38,40,84}; int n= 6; int i; for(i=0;i<n;i++) { printf("%d\t",a[i]); } printf("\n\n"); HeadSort(a,n); for(i=0;i<n;i++) { printf("%d\t",a[i]); } printf("\n"); system("pause"); return 0;}
阅读全文
0 0
- 堆排序(C语言版本)
- 堆排序算法的C语言版本
- 堆排序(C语言)
- 堆排序(C语言)
- 堆排序----C语言
- 堆排序C语言
- c语言堆排序
- 堆排序 ----- C语言
- C语言堆排序
- 堆排序c语言
- 堆排序算法(c语言)
- 堆排序算法(c 语言实现)
- 堆排序(C语言实现)
- 堆排序(C语言实现)
- 堆排序算法(C语言)
- 堆排序C语言实现
- 堆排序C语言实现
- 堆排序C语言实现
- 将元数据前补零
- UILabel(displaylabel为例,附录UIColor)
- centos7关闭防火墙
- 比较字符串
- 洛谷P1171 售货员的难题
- 堆排序(C语言版本)
- 爬取网页内所有的url和meta标签,title标签
- Linux下如何配置Kafka Cluster (Kafka族)
- 怎样快速判断掩码第一个为1的Bit位置
- ClassLoader以及双亲委托模式
- 在 SQLite3 中使用回调函数
- php 调用java php-java-bridge
- POJ_3420_Quad Tiling
- ADXL345串口输出