堆排序算法

 

int nHeapSize = 0;//當前堆大小
void Max_Heap(int *A,int i)  //調整爲大根堆
{
	int left = 2*i;
	int right = 2*i+1;
	int large = i;
	int nSwitchTemp;
	if (left <= nHeapSize && A[left] > A[large])
	{
		large = left;
	}
	if (right <= nHeapSize && A[right] > A[large])
	{
		large = right;
	}
	if (large != i)
	{
		nSwitchTemp = A[i];
		A[i] = A[large];
		A[large] = nSwitchTemp;
		Max_Heap(A,large);
	}
}
void Build_Heap(int *A,int N)//從最後一個非葉子節點向前建堆
{
	int i;
	for(i = N/2;i>=1;i--)
	{
		Max_Heap(A,i);
	}
}
void Heap_Sort(int *A,int N) // A爲待排序數組指針,N爲元素個數,數據從A[1]開始存放,A[0]不使用
{
	nHeapSize = N;  //初始化堆大小爲整個數組
	int nSwitchTemp,i;
	Build_Heap(A,N);//建立大根堆
	for (i = N;i >= 2;i--)
	{
		nSwitchTemp = A[i];
	    A[i] = A[1];
        A[1] = nSwitchTemp;
	    nHeapSize--;
	    Max_Heap(A,1);
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章