算法达人进来~堆排序
这是算法导中的伪代码
其中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被管理员删除