zoukankan      html  css  js  c++  java
  • 数据结构堆排序

    #include <iostream>
    #include<stdlib.h>
    
    // 创建一个结构体 
    typedef struct node{
    	int data;
    	struct node *left,*right;
    }BiTreeNode;  
    
    int rear=0,front=0;//全局变量 
    
    //创建全然二叉树 
    BiTreeNode *CreateBiTree(int a[],BiTreeNode **Q,int n){
    	
    	BiTreeNode *root,*p,*t=NULL;
    	int i;
    	//先把根节点创建出来 
    	root=(BiTreeNode *)malloc(sizeof(BiTreeNode));
    	root->data=a[0];
    	root->left=root->right=NULL;
    	
    	Q[++rear] = root;//新添加的
    	for(i=1;i<n;i++){	    
           p=(BiTreeNode *)malloc(sizeof(BiTreeNode));
           p->left=p->right=NULL;
    	   p->data=a[i];
    	   if(t==NULL)
    	     t=Q[++front];
    	   //if(!t)
    	      //p=t->left;
    		if(!t->left)
    		  t->left = p;
    	   else
    	      //p=t->right;
    		  if (!t->right){
    		  t->right = p;
    		  t=NULL;	
    	      }
    	     //p=Q[++rear];
    		  Q[++rear] = p;
    	}
    	
    	return root;	
    }
    //void Adjust(BiTreeNode *root,BiTreeNode **Q){
    void Adjust(BiTreeNode **Q){	
    	int k,flag=0,m;
    	BiTreeNode * t;
    	while(1){
    		k=front;
    		flag=0;
    	    while(k>0){
    	    	t=Q[k];
    			
    	    	//if(t->data > t->left->data){
    	    	if(t->data < t->left->data){
    				m=t->data;
    	    		t->data=t->left->data;
    	    		t->left->data=m;
    	            flag=1;
    	    	}
    			
    	    	//if(!t->right&&t->data > t->right->data){
    			if(t->right&&t->data < t->right->data){
    	    	
    				m=t->data;
    	    		t->data=t->right->data;
    	    		t->right->data=m;
    	            flag=1;
    	    	}
    			
    	    	k--;
    	    }
    	    if(!flag)
    	    break;
    	}	
    	
    }
    void printBiTree(BiTreeNode **Q,int n){
    	
    	int i;
    	
    	//for(i=n-1;i>0;i--)
    	for (i = n; i > 0; i--)
    	   printf("%d  ",Q[i]->data);
    	printf("
    ");
    		
    } 
    int main(int argc, char** argv) {
    	 int a[8]={3,2,5,8,4,7,6,9};
    	 int m;  // 用来交换 
    	  
    	 BiTreeNode **Q,*root;
    	 
    	 Q=(BiTreeNode **)malloc(9*sizeof(BiTreeNode *));
    	 //创建全然二叉树 
    	 root=CreateBiTree(a,Q,8);
    	 
    	 //调整成大根堆
    	 
    	 Adjust(Q);  
    	
    	 while(rear > 1){
    	 	m=Q[rear]->data;
    	 	Q[rear]->data=Q[1]->data;
    	 	Q[1]->data=m;
    	 	
    	 	rear--;  // 砍掉叶子 
    	 	if(Q[front]->right)
    	 	  // Q[rear]->right=NULL;
    		  Q[front]->right = NULL;
    	 	else{
    	 		Q[front]->left=NULL;
    	 			front--;
    	 	}
    		Adjust(Q);//新添加的
    	 }
    	 //输出
    	 
    	 printBiTree(Q,8);
    	 	
    	return 0;
    }

  • 相关阅读:
    107. Binary Tree Level Order Traversal II
    108. Convert Sorted Array to Binary Search Tree
    111. Minimum Depth of Binary Tree
    49. Group Anagrams
    使用MALTAB标定实践记录
    442. Find All Duplicates in an Array
    522. Longest Uncommon Subsequence II
    354. Russian Doll Envelopes
    opencv 小任务3 灰度直方图
    opencv 小任务2 灰度
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7099897.html
Copyright © 2011-2022 走看看