排序之堆排序
2012-12-21 15:54
218 查看
堆排序是是指利用堆这种数据结构所设计的一种排序算法。
c语言的实现如下:
c语言的实现如下:
#include <stdio.h> #define SIZE 10 //打印数组 void display(int array[],int size){ printf("the array is:"); int i; for(i=0;i<size;i++){ printf("%d ",array[i]); } printf("\n"); } //创建堆,使最大的数位于树根 void createHeap(int array[], int size){ int parent,child,temp; //刚开始时,parent的值为最后一个父节点,依次往前将斤左右孩子中较大的节点与父节点交换,最后使树根为最大数 for(parent=(size+1)/2-1;parent>=0;parent--){ //获取父节点的左孩子 child = parent*2+1; //如果该父节点存在右孩子,并且比做孩子大,则使用右孩子,否则还是使用左孩子 if((child+1)<=size){ if(array[child+1] > array[child]){ child++; } } //将左右孩子中较大者与父节点交换 if(array[parent] < array[child]){ temp = array[parent]; array[parent] = array[child]; array[child] = temp; } } } //堆排序 void heap(int array[], int size){ int i,temp; for(i=size-1;i>=0;i--){ //创建堆,使最大的数位于树根 createHeap(array,i); //将树根和最后一个节点交换 temp = array[i]; array[i] = array[0]; array[0] = temp; display(array,SIZE); } } int main(void){ int array[SIZE]={34,45,1,39,21,68,65,100,4,51}; display(array,SIZE); //堆排序函数 heap(array,SIZE); display(array,SIZE); return 0; }
相关文章推荐
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析(好戏在后面,有图有真相)
- 各种排序算法实现——基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- 链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序)
- 排序问题进击之一:堆排序
- 堆排序--数据结构排序1
- 六大排序(选择,插入,冒泡,希尔,快排,堆排序)
- 九大排序算法及其实现- 插入.冒泡.选择.归并.快速.堆排序.计数.基数.桶排序.堆排序
- 经典排序算法设计与分析(插入排序、冒泡排序、选择排序、shell排序、快速排序、堆排序、分配排序、基数排序、桶排序、归并排序)
- 快速排序,优于堆排序
- Java高级排序(希尔排序,快速排序,堆排序,归并排序,桶排序)
- Java排序六:堆排序
- 排序第五章:堆排序
- 写一个快排序,堆排序需要多少时间?
- 【排序二】选择排序(选择排序&&堆排序)
- 算法学习笔记----第二部分:排序和顺序统计量----第6章、堆排序
- 插入排序、快速排序、堆排序
- Java提高 - 八大排序方法之堆排序
- Java-时间复杂度为O(nlogn)的排序算法(快速排序, 归并排序, 堆排序, 希尔排序)
- 算法 排序算法之选择排序--直接选择排序和堆排序
- 排序小结--希尔排序--快排--堆排序--归并排序