排序——堆排序

来源:互联网 发布:怎么做seo 编辑:程序博客网 时间:2024/06/04 17:40
//堆排序#include <cstdio>using namespace std;#define MAX_NUM1050int data[MAX_NUM];void swap2(int *a , int *b){int tmp = *a;*a = *b;*b = tmp;}void adjust(int node , int N){int start = node*2 ;int left  =  start+1;int right =  start+2;int max = start ;//不要越界 if(left<N && data[left]>data[max]){max = left;}if(right<N && data[right]>data[max]){max = right;}if(max!=start){//交换swap2(&data[max] , &data[start]);//继续调整以孩子为父节点的子树 adjust(max , N);}}int main(void){int N ;int i ;#ifdef DEBUGfreopen("input.txt" , "r" , stdin);freopen("output.txt" , "w" , stdout);#endifscanf("%d" , &N);for( i =0 ; i<N; i++){scanf("%d" , &data[i]);}//堆排序开始~ for(i=(N-1)/2 ; i>=0 ; i--){adjust(i , N);}//开始输出 for(i=N-1 ; i>=0 ; i--){int j ; swap2(&data[0] , &data[i]);adjust( 0 , i);for( j =0 ; j<N ; j++){printf("%d " , data[j]); }  printf("\n");} return 0;}

0 0
原创粉丝点击