zoukankan      html  css  js  c++  java
  • 堆排序

    堆相关操作

    建堆

    向下堆化

    向上堆化

    删除堆顶(向下堆化)

    添加元素(向上堆化)

    堆排序

    建堆(逆序 向下堆化)

    排序(向下堆化)

    Code

    #include <iostream>
    using namespace std;
    const int maxn=100;
    int arr[maxn]= {5,2,6,7,4,3,0,9,8,1};
    int len =10;
    //向下堆化
    void downAjust(int low,int heigh) {
    	int i=low,j=low*2+1;
    	while(j<=heigh) {
    		if(j+1<=heigh&&arr[j]<arr[j+1])j=j+1; //若右子节点存在,并且大于左子节点
    		if(arr[i]>arr[j])break;
    		else {
    			swap(arr[i],arr[j]);
    			i=j;
    			j=2*i+1;
    		}
    	}
    }
    //向上堆化
    void upAjust(int low,int high) {
    	int i=high,j=(i-1)/2;
    	while(j>=low&&i>0) {
    		if(arr[i]<arr[j])break;//父节点权值大于子节点权值
    		else {
    			swap(arr[i],arr[j]);
    			i=j;
    			j=(i-1)/2;
    		}
    	}
    }
    //建堆
    void heap() {
    	for(int i=(len-1)/2; i>=0; i--)
    		downAjust(i,len-1); //向下调整
    }
    // 堆排序
    void heap_sort() {
    	for(int i=len-1; i>=1; i--) {
    		swap(arr[i],arr[0]); //最后一个节点与堆顶交换
    		downAjust(0,i-1); //堆顶向下堆化
    	}
    }
    // 打印堆
    void print_heap() {
    	for(int i=0; i<len; i++) {
    		printf("%d",arr[i]);
    		printf("%s",i==len-1?"
    ":" ");
    	}
    }
    // 插入元素
    void insert(int v) {
    	arr[len++]=v;
    	upAjust(0,len-1);
    }
    // 删除堆顶
    void delete_top(){
    	swap(arr[0],arr[--len]);
    	downAjust(0,len-1);	 
    } 
    int main(int argc,char *argv[]) {
    	heap();
    	// 堆排序
    //	print_heap();
    //	heap_sort();
    //	print_heap();
    
    
    	// 插入元素
    //	print_heap();
    //	insert(10);
    //	print_heap();
    
    	// 删除元素
    //	print_heap();
    //	delete_top();
    //	print_heap();
    
    	return 0;
    }
    
  • 相关阅读:
    借书证信息管理系统,C语言实现
    以太坊 助记词提取 账户 公钥 私钥 最新实现可用。
    solc@0.6.3 web3@1.2.6 都是最新版本的,编译与部署示例
    ganache gas 错误
    MFC 记事本 文本编辑器
    课程设计 C语言 学生成绩管理系统
    cmake(.os .a)
    git recommend(alive)
    tensorflow tfrecoder read write
    300. 最长上升子序列
  • 原文地址:https://www.cnblogs.com/houzm/p/12345019.html
Copyright © 2011-2022 走看看