堆排序算法的實現(xiàn)!!
來源:程序員人生 發(fā)布時間:2015-01-04 09:32:00 閱讀次數(shù):3202次
上機代碼:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define parent(i) (i)/2
#define left(i) 2*(i)
#define right(i) 2*(i)+1
int size;
void heapify(int a[], int i)
{
int l = left(i), r = right(i), largest;
if(l<=size && a[l] > a[i])
largest = l;
else largest = i;
if(r<=size && a[r] > a[largest])
largest = r;
if(largest != i)
{
int t = a[i];
a[i] = a[largest];
a[largest] = t;
heapify(a, largest);
}
}
void build_heap(int a[])
{
int len = size;
for(int i=len/2; i>=1; i--)
heapify(a, i);
}
void heap_sort(int a[])
{
build_heap(a);
for(int i=size; i>=2; i--)
{
int t = a[1]; a[1] = a[i]; a[i] = t;
size--;
heapify(a, 1);
}
}
int main()
{
int a[20];
printf("請輸入數(shù)據(jù)個數(shù):
");
scanf("%d", &size);
int len = size;
printf("請輸入%d個你要排序的數(shù):
", size);
for(int i=1; i<=size; i++)
scanf("%d", &a[i]);
heap_sort(a);
for(int i=1; i<len; i++)
printf("%d ", a[i]);
printf("%d
", a[len]);
return 0;
}
生活不易,碼農辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈