您的位置:首页 > 理论基础 > 数据结构算法

【数据结构】堆排序

2014-04-14 17:01 204 查看
 给定一个整形数组a[]={16,7,3,20,17,8},对其进行堆排序。

    首先根据该数组元素构建一个完全二叉树,得到



然后需要构造初始堆,则从最后一个非叶节点开始调整,调整过程如下:


然后20再与最后一个元素3交换位置,分离出20,得到了以3为根的一个新堆,再进行堆排序.依次分离出所有元素.

源码如下:

void heapAdjust(int a[], int s, int m)
{
int temp = a[s];
for (int j=2*s; j<=m; j*=2)
{
if (j<m && a[j] < a[j+1])
++j;
if(temp >= a[j])
break;
a[s] = a[j];
s = j;
}
a[s] = temp;
}

void heapSort(int a[], int n)
{
int i;
for (i=(n+1)/2; i>=0; i--)
heapAdjust(a, i, n-1);
for (i=n-1; i>0; i--)
{
swap(a[i], a[0]);
heapAdjust(a,0, i-1);
}
}
int main()
{
int a[10] = {0};
for(int i=0; i<10; i++)
{
a[i] = rand()%100+1;
cout << a[i] << " ";
}
cout << endl;
heapSort(a,10);
for(i=0; i<10; i++)
{
cout << a[i] << " ";
}
cout << endl;
return 0;
}

资料参考:http://www.cnblogs.com/dolphin0520/archive/2011/10/06/2199741.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息