首页 > 其他 > 详细

好理解的堆排序

时间:2014-03-09 01:15:04      阅读:466      评论:0      收藏:0      [点我收藏+]

对于堆排序,其实就是一个路径上的冒泡的过程,所以可以用这个思想去写代码,

思路:每次父节点都和他的左子树和右子树比较,三者中最大的那个与父节点交换位置,这样递归之后根节点存放的就是该次遍历最大的值,之后将根节点与最后的节点交换,在进行查找(0~(lenth-1))中的最大值与倒数第二个交换位置就OK了。这样自己比较好理解。

bubuko.com,布布扣
 1 #include <iostream>
 2 using namespace std;
 3 
 4 void swap(int &a, int &b){
 5     int tmp = a;
 6     a = b;
 7     b = tmp;
 8 }
 9 
10 int findmax(int a[],int lenth,int i){
11     //找到第i个节点所代表的子树中的最大值
12     if(2*(i) >= lenth) return a[i];
13     int left, right,max;
14     int rightmax,leftmax;
15     rightmax = leftmax = max =0;
16     right = 2*i+1;
17     left = 2*i;
18     if(i == 0){
19         right = 2;
20         left = 1;
21     }
22     leftmax = findmax(a,lenth,left);
23     if(right < lenth){
24         rightmax = findmax(a,lenth,right);
25     }
26     if(leftmax > rightmax && leftmax > a[i])swap(a[i],a[left]);
27     if(rightmax > leftmax && rightmax > a[i])swap(a[i],a[right]);
28     return a[i];
29 }
30 
31 int* heapSort(int a[], int lenth){     
32     int max;
33     for(int i = 0; i < lenth; i++){
34         max = findmax(a, lenth-i, 0);
35         swap(a[0], a[lenth-i-1]);
36     }
37     return a;
38 }
bubuko.com,布布扣

好理解的堆排序,布布扣,bubuko.com

好理解的堆排序

原文:http://www.cnblogs.com/marylins/p/3588728.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!