选择排序之--堆排序
2017-08-03 14:03
295 查看
#include <stdio.h> #include<malloc.h> void swap(int *x,int *y) { *x^=*y; *y^=*x; *x^=*y; } void HeapAdjust(int A[],int len,int i) { if(A==NULL||len<=0||2*i+1>=len) return ; while(2*i+1<len) //i存在左孩子 { int large=2*i+1; if(2*i+2<len && A[2*i+2]>A[2*i+1]) large=2*i+2; if(A[i]<A[large]) swap(&A[i],&A[large]); else break; i=large; } } //堆排序 void HeapSort(int A[],int len) { for(int i=len>>1-1;i>=0;i--) //最后一个非叶子结点序号为len/2-1; HeapAdjust(A,len,i); for(i=len-1;i>=1;i--) // 真正的排序过程 { swap(&A[i],&A[0]); HeapAdjust(A,i,0); //重建堆 //HeapAdjust(A+len-i,i,0); } } void main( ) { int A[8]={3,8,4,6,2,5,11,40}; HeapSort(A,8); printf("输出排序后:\n"); for (int i = 0; i < 8; i++) printf("%d ", A[i]); //等价于 *(A+i) getchar();getchar(); }
相关文章推荐
- 简单选择排序,树形选择排序,堆排序详解
- 第16周项目选择排序之堆排序
- 选择排序---堆排序
- 排序算法(堆排序,归并排序,快速排序、选择排序、直接插入排序)
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 六、内部排序综合(九种)—插入类排序(直接插入、折半插入、希尔排序);交换类排序(冒泡、快速);选择类排序(简单选择、堆排序);二路归并排序;基数排序
- 插入排序、冒泡排序、选择排序、Shell排序、快速排序、归并排序、堆排序
- 排序之选择排序、堆排序、归并排序、高速排序
- 排序算法2--简单选择排序、堆排序
- 排序算法2--简单选择排序、堆排序
- c语言排序算法(所有的都是升序,冒泡排序、插入排序、快速排序、选择排序、希尔排序、堆排序 )
- 【数据结构和算法】排序算法之二:选择排序和堆排序
- 排序算法-之选择排序(直接选择排序,堆排序)
- 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结
- 数据结构例程——选择排序之堆排序
- 九大排序算法及其实现- 插入.冒泡.选择.归并.快速.堆排序.计数.基数.桶排序.堆排序
- 几种常用的排序算法(快速排序,希尔排序,堆排序,选择排序,冒泡排序)
- 选择排序----堆排序----java实现
- 选择排序之堆排序
- 选择类排序-堆排序