堆排序算法的實現

#include<stdio.h>

//調整堆
void Swap(int *a, int pos1, int pos2);
void HeapAdjust(int *a, int i, int size)
{
	int lchild = LeftChild(i);
	int rchild = RightChild(i);
	int largest = i; 
	
	if(lchild < size && a[lchild] > a[largest])  
	{ 
		largest = lchild;  
	} 
	else  
	{ 
		largest = i;   
	}
	if(rchild < size && a[rchild] > a[largest])   
	{ 
		largest = rchild;   
	}  
	 
	if(largest != i)  
	{ 
		Swap(a, i, largest);//交換 
		HeapAdjust(a,largest,size);  
	}   
}			

int LeftChild(int pos)
{
	return pos * 2 + 1; 
}

int RightChild(int pos)
{
	return pos * 2 + 2;  
} 

void Swap(int *a, int pos1, int pos2)
{
	int tmp = a[pos1]; 
	a[pos1] = a[pos2]; 
	a[pos2] = tmp; 
}

//建立並調整堆
void Build_Max_Heap(int *a, int size)
{
	int i; 
	for(i = (size / 2); i >= 0; i--) 
	{
		HeapAdjust(a,i,size);
	}
}

void Heap_Sort(int *a, int size)
{
	Build_Max_Heap(a,size);
	int length = size; 
	int i; 
	for(i = length - 1; i >= 1; i--)
	{
		Swap(a, 0, i);
		size = size - 1;
		HeapAdjust(a,0,size);
	}
}

void main(void)
{
	int a[] = {2,6,9,1,0,5,3,4,7,8};
	int size = 10;
	Heap_Sort(a,size);
	int i;
	for(i = 0; i < size; i++) 
	{ 
		printf("%d ",a[i]);
	}
	printf("\n");
}
    該算法用最大堆排序算法對數據進行排序,主要的步驟是1、建立堆 2、調整堆中數據的位置.
發佈了28 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章