算法导论第六章-堆排序c++

来源:互联网 发布:java colortorgb 编辑:程序博客网 时间:2024/04/30 19:14
#include "stdafx.h"#include <stdio.h>#include <iostream>#include <string>#include <math.h>#include <time.h>using namespace std;void MAX_HEAPIFY(int a[],int i,int n)//n是堆中元素的总数 from 1 to n{int left = i<<1;int right = left+1;int largest;if(left<=n && a[left-1] > a[i-1])largest = left;elselargest = i;if(right<=n && a[right-1] > a[largest-1])largest = right;if(largest != i){int temp = a[i-1];a[i-1] = a[largest-1];a[largest-1] = temp;MAX_HEAPIFY(a,largest,n);}}void BUILD_MAXHEAP(int a[],int n)//n是堆中元素的总数 from 1 to n{for(int i=n/2;i>=1;i--)MAX_HEAPIFY(a,i,n);}void HEAP_SORT(int a[],int n){BUILD_MAXHEAP(a,n);for(int i=n;i>1;i--){int temp = a[1-1];a[1-1] = a[i-1];a[i-1] = temp;MAX_HEAPIFY(a,1,i-1);}}int main(){int a[10];srand(time(0));for(int i=0;i<10;i++)a[i] = rand()%1000;//a[i] = i;for(int i=0;i<10;i++)printf("%5d",a[i] );cout<<endl;HEAP_SORT(a,10);for(int i=0;i<10;i++)printf("%5d",a[i] );cout<<endl;return 0;}

1 0
原创粉丝点击