堆排模板
来源:互联网 发布:中央四台网络电视 编辑:程序博客网 时间:2024/06/16 03:25
#include<stdio.h>#include<time.h>#include<stdlib.h>#include <windows.h>#define N 100int a[N+1];//待排序数组为a[N+1],下标从1开始void Heap_adjust(int s, int m) //调整为大顶堆函数{int j;intrc ;rc=a[s]; for (j=2*s; j<=m; j=j*2){ if (j<m && a[j] < a[j+1] )++j;if (rc > a[j] )break;a[s]=a[j]; s=j;}a[s]=rc;}void Creat() //建堆函数{for(int j=N/2; j>=1; j--)Heap_adjust(j, N);}void HeapSort() //堆排函数{Creat();for (int i=N; i>1; i--) {int x=a[1];a[1]=a[i];a[i]=x;Heap_adjust(1,i-1);}}int main(){srand(time(NULL));//用来产生随机数printf("原随机数组为:\n");for(int i=1;i<=N;i++){a[i]=rand();printf("%d ",a[i]);if(i%10==9) printf("\n");}HeapSort();printf("\n堆排后的数组为:\n");for(int i=1;i<=N;i++){printf("%d ",a[i]);if(i%10==9) printf("\n");}}
阅读全文