日期:2014-05-17  浏览次数:20901 次

算法达人进来~堆排序
这是算法导中的伪代码
其中A是数组

  MaxHeapify(A,i)
1   L <- LEFT(i)
2   R<-RIGHT(i)
3   if<=heapsize[A] and A[L]>A[i]   //这个地方我不明白 这个heapsize[A]要如何实现 因为书里
4    then largest<-L                 //讲到heapsize[A]是代表这个堆的最大结点 可是在C#里面
5    else  largest <-i                  //要如何表示一个数组里的一个堆的上限
6    if r<=heapsize[A] and A[r]>A[largest]
7     then largest<-r
8      if largest!=i
 9      then     exchange A[i]<->A[largest]
 10             MaxHeapify(A,largest)

下面是我自己写的C#代码
  public static void MaxHeapIfy(int[] A, int i)
       {
           int L = i * 2;
           int R = i * 2 + 1;
           int largest;
       
           if (L <= A.Length && A[L] > A[i])   这就是错误的地方, heapsize[A]是堆的上限,
              largest = L;                         而不是数组的长度,这个如何表示~
                else
               largest = i;

           if (R <= A.Length && A[R] > A[largest])
              largest = R;
           if (largest != i)
           { 
              int tempstr=A[i];
              A[i] = A[largest];
              A[largest] = tempstr;
              MaxHeapIfy(A, largest);
           }
       
       
       }


------最佳解决方案--------------------
http://blog.csdn.net/morewindows/article/details/6709644
------其他解决方案--------------------
两种方法。
一是把堆元素的数量也传进去。比如MaxHeapify(A, i, count)。
二是用List<int>代替int[]。
------其他解决方案--------------------
该回复于2012-12-08 09:27:40被管理员删除