堆排序
2014-08-18 08:53
99 查看
如果你在搜索引擎搜到本文!不建议阅读,是本人理解所写,给自己看的。
若你阅读,可能会让你浪费时间!!!
还是请自己查阅书籍,网上的垃圾博文太多了,推荐数据结构与算法分析---C语言表述。
不要浮躁沉下心来看,比上网看垃圾强多了!
相信自己努力可以改变某些东西!多思考和总结!
代码:
结果:
The first build heap:
97 53 59 26 41 58 31
This is a HeapSort Data:
26 31 41 53 58 59 97
Process returned 1 (0x1) execution time : 0.025 s
Press any key to continue.
若你阅读,可能会让你浪费时间!!!
还是请自己查阅书籍,网上的垃圾博文太多了,推荐数据结构与算法分析---C语言表述。
不要浮躁沉下心来看,比上网看垃圾强多了!
相信自己努力可以改变某些东西!多思考和总结!
代码:
#include<stdio.h> #define LeftChild(i) ( 2*i + 1 ) // 下标 i = 0 存储是最大的值 , 所以leftchild 是 2×i + 1 ; void PercDown(int a[] , int i , int n) { int child , temp ; for( temp = a[i] ; LeftChild(i) < n ; i = child ) { child = LeftChild(i); if ( (child != n -1) && (a[child+1] > a[child]) ) //挑选最大的子节点 child++; if( temp < a[child] ) //最大的子节点 赋值给 父节点 a[i] = a[child] ; else break; } a[i] = temp ; //把之前节点 赋值给 } void Swap(int *a , int *b) { int *Tmp ; *Tmp = *a ; *a = *b ; *b = *Tmp ; } void HeapSort(int a[] ,int n ) { int i ; for(i = n/2 ; i >= 0 ; i-- ) // n/2 标号最大分支节点,即最大的非叶子节点标号 ; PercDown(a , i , n); //求最大堆,采用下滤,使最大的浮上来,形成新的堆 printf("The first build heap:\n"); for(i = 0 ; i < n ; i++ ) printf("%d \t" , a[i]); printf("\n"); for(i = n -1 ; i > 0 ; i-- ) { Swap( &a[0] , &a[i] ) ; //本代码 堆排序是数组从下标0开始的 ,堆的最后元素和堆的首元素交换 ,仅仅用一个数组就可以排序 PercDown(a , 0 , i ) ; //每筛选出一个最大的堆,就开始下滤,建立新堆 } } int main() { int a[] = {31,41,59,26,53,58,97}; //测试数组 int len , i ; len = sizeof(a)/sizeof(int); HeapSort( a , len ); //建立堆 printf("This is a HeapSort Data:\n"); for(i = 0 ; i < len ; i++ ) //遍历已经拍好序的数组 printf("%d \t" , a[i]); return 1; }
结果:
The first build heap:
97 53 59 26 41 58 31
This is a HeapSort Data:
26 31 41 53 58 59 97
Process returned 1 (0x1) execution time : 0.025 s
Press any key to continue.
相关文章推荐
- Java-堆排序
- 排序六 堆排序
- 堆排序(最大堆)
- 最大堆实现堆排序
- 堆排序
- 堆的实现、堆排序、优先队列
- 归并排序,堆排序,基数排序,希尔排序,快速排序,交换排序,选择排序和插入排序的总结和比较
- 排序1+4:归并排序(MergeSort)和堆排序(HeapSort)
- 堆排序
- 堆排序 C#
- 【数据结构】二叉树之堆排序(完整代码)
- 堆排序
- 算法基础:排序(四)——二叉堆、优先队列、堆排序——Python实现
- C# 堆排序 完整代码
- 用C++实现堆排序
- 堆排序完整代码带详解
- 算法导论读后感-之堆,堆排序,堆排序的应用
- 基本排序方法及分析(七):HeapSort 堆排序
- 排序算法@c++描述-堆排序
- 堆排序