堆排序C语言实现
来源:互联网 发布:ubuntu键盘输入法系统 编辑:程序博客网 时间:2024/05/16 05:08
堆的概念这里不再描述,这里主要实现堆排序,堆排序主要分为两步:
1.堆化数组(最小堆);
2.交换首尾元素,(则最后一个元素为最小),调整前n-1个元素,使前n-1个元素仍为为最小堆,循环,直到还剩一个元素;这样排序下来,数组为倒序。
代码如下:
void swap(int *a,int *b){ int temp=*a; *a=*b; *b=temp;}
void FixdownMinHeap(int a[],int index,int len) //向下调整堆{ int father_index=index; int left_child_index=2*father_index+1; int right_child_index=2*father_index+2; int min=0; int min_index=0; while(left_child_index<len) //重要 判断father_index不是叶子节点 { if(a[left_child_index]>a[right_child_index]&&right_child_index<len) //右节点存在且最小 { min=a[right_child_index]; min_index=right_child_index; } else { min=a[left_child_index]; min_index=left_child_index; } if(a[father_index]>min) { swap(&a[father_index],&a[min_index]); } father_index=left_child_index; left_child_index=2*father_index+1; right_child_index=2*father_index+2; }}
void createMinHeap(int a[],int n)//堆化数组{ int i=(n-1-1)/2; //因为n是数组长度,(n-1-1)/2表示最大父节点index while(i>=0) { FixdownMinHeap(a,i,n); i--; }}
void MinHeapSort(int a[],int n){ createMinHeap(a,n); int i=0; for(i=n-1;i>0;i--) { swap(&a[i],&a[0]); //交换首尾元素 FixdownMinHeap(a,0,i); //调整堆 }}
- 堆排序C语言实现
- 堆排序C语言实现
- 堆排序C语言实现
- 堆排序C语言实现
- 堆排序--C语言实现
- C语言实现堆排序
- 堆排序--C语言实现
- 堆排序C语言实现
- 堆排序C语言实现
- C语言实现堆排序
- 堆排序c语言实现
- 堆排序-C语言实现
- 堆排序及C语言实现
- 堆排序的实现-C语言
- c语言 实现堆排序算法
- 堆排序C语言实现 算法导论
- 堆排序的C语言实现
- 堆排序原理及c语言实现
- C++ 构造函数抛出异常会引起内存泄漏吗?
- 湘潭赛小感
- 在VMware中对SUSE Linux的性能优化手册
- chkconfig 命令详解
- Xlib在屏幕上显示本地图片(绝对是CSDN等中文博客第一个Demo)
- 堆排序C语言实现
- eclipse安装svn插件
- 我很不明白,开始出现,长大成长,模仿仿照,发问学习,生活工作,怎么串都串不起来串不顺,已经够意思够有意思了,还要开发游戏来玩来学习,只能给本已多的吸收不了的东西,再增加过分的包装打扮,
- 西洋经济史的趣味-赖建诚
- 对指针、引用的理解(一)
- DB2错误信息(按sqlcode排序)
- 开源 免费 java CMS - FreeCMS1.3-标签 questionList
- Fedora 17 安装字体
- 图文并茂 在MyEclipse 8.6上搭建Android开发环境+MyEclipse8.5 无法安装ADT解决办法