首页 > 代码库 > 练习 堆排序
练习 堆排序
1 #include<stdio.h> 2 int h[101]; 3 int n; 4 void swap(int x,int y)//交换 5 { 6 int t=h[x]; 7 h[x]=h[y]; 8 h[y]=t; 9 }10 void siftdown(int i)//调整一次11 {12 int t,flag=0;13 while(2*i<=n&&flag==0){14 if(h[i]<h[i*2])15 t=2*i;16 else17 t=i;18 if(i*2+1<=n)19 if(h[i]<h[2*i+1])20 t=2*i+1;21 if(t!=i)22 {23 swap(t,i);24 i=t;25 }26 else27 flag=1;28 }29 }30 void creat()//建堆31 {32 int i;33 for(i=n/2;i>=1;i--)34 {35 siftdown(i);36 }37 }38 void heapsort()//堆排序39 {40 while(n>1)41 {42 swap(1,n);43 n--;44 siftdown(1);45 }46 }47 int main()48 {49 int i,num;50 scanf("%d",&num);51 for(i=1;i<=num;i++)52 scanf("%d",&h[i]);53 n=num;54 creat();55 heapsort();56 for(i=1;i<=num;i++)57 printf("%d ",h[i]);58 printf("\n");59 return 0;60 }
练习 堆排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。