您的位置:首页 > 编程语言 > C语言/C++

堆排序实现

2011-10-03 12:13 113 查看
(编写时有几个错误点,见注释,已通过dev c++调试通过)
#include <stdio.h>#include <conio.h>void HeapAdjust(int a[],int s,int n)//大顶堆{int temp=a[s];for(int j=2*s;j<=n;j*=2){if(j<n&&a[j]<a[j+1]) j++;if(temp>a[j]) break;//这个错误点困扰了我好长时间。temp写成a[s]了,忘记了s[s]会发生变化。a[s]=a[j];//一开始颠倒了s=j;}a[s]=temp;}void HeapSort(int a[],int len){for(int i=len/2;i>0;--i){HeapAdjust(a,i,len);}//建一个初始堆for(int i=len;i>1;--i){int temp=a[1];a[1]=a[i];a[i]=temp;HeapAdjust(a,1,i-1);}}int main(){int a[11]={0,9,8,7,1,6,4,3,5,2,0};printf("初始序列");for(int i=1;i<11;i++){printf("%d ",a[i]);}HeapSort(a,10);printf("排序后的序列");for(int i=1;i<11;i++){printf("%d ",a[i]);}getch();return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ include