堆排序

#include<stdio.h> 
#include<time.h>
#include<stdlib.h>
#define max 100
void swap(int *a,int* b)
{
	int tmp;
	tmp=*a;
	*a=*b;
	*b=tmp;
}
void HeapAdjust(int array[], int i, int nLength)
{
	
	
	for(int j=i;2*j+1<nLength;j++)
	{
		if(array[j]<array[2*j]||array[j]<array[2*j+1])
		{
			if(array[2*j]>array[2*j+1])
			{
				swap(&array[j],&array[2*j]);
			}else
			{
				swap(&array[j],&array[2*j+1]);
			}
		}
	}
}


void HeapSort(int array[], int length)

{
	int i;
	
    // 調整序列的前半部分元素,調整完之後第一個元素是序列的最大的元素
	
    for ( i = length / 2 - 1; i >= 0; --i)
		
    {
		
        HeapAdjust(array, i, length);
		
    }

	
	
    // 從最後一個元素開始對序列進行調整,不斷的縮小調整的範圍直到第一個元素
	
    for ( i = length - 1; i > 0; --i)
		
    {
		
        // 把第一個元素和當前的最後一個元素交換,
		
        // 保證當前的最後一個位置的元素都是在現在的這個序列之中最大的
		
		// 
		swap(&array[0], &array[i]);
		
		
        HeapAdjust(array, 0, i);
		
    }
	
}
main()
{
	
	int arr[max];
    time_t t;
	
	time(&t);
	srand(t);
	for(int i=0;i<max;i++)  //隨機產生100個數進行測試
		arr[i]=rand()%100;
	for( i=0;i<max;i++)
		printf("%d\t",arr[i]);
			printf("\n");


				HeapSort(arr,max);
	for( i=0;i<max;i++)
		printf("%d\t",arr[i]);
}

堆排序是較好的排序,空間複雜度小,特別適合大量數據排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章