堆排序C++实例代码

#include<iostream>
using namespace std;

void display(int *a, int size){
    for(int i = 0 ; i < size; i++){
        cout << a[i] << " ";
    }
    cout << endl;
}

void heapSort(int *a, int i, int size){
     int lc = 2*i,rc = 2*i+1,max = i;
     if(lc <= size && a[max-1] < a[lc-1]){
          max = lc;
     }
      if(rc <= size && a[max-1] < a[rc-1]){
         max = rc;
      }
      if(max != i){
         swap(a[i-1],a[max-1]);
         if(2*max <= size){
             heapSort(a,max,size);
         }
      }
}

void buildHeap(int *a, int size){
    for(int i = size/2;i > 0; i-- ){
        heapSort(a,i,size);
    }
}

int main(){
    int a[] = {16,7,3,20,17,8};
    int size = 6;
    buildHeap(a,size);

    swap(a[0],a[size]);
    size--;
    while(size>1){
        heapSort(a,1,size);
        swap(a[0],a[size]);
        size--;
    }

//    while(--size>0){
//        swap(a[0],a[size]);
//        heapSort(a,1,size);
//    }
    display(a,6);
    return 0;

}

  注释部分对上面的优化。

时间: 2024-10-11 07:36:25

堆排序C++实例代码的相关文章

java计划任务调度框架quartz结合spring实现调度的配置实例代码分享

点击链接加入群[JavaEE(SSH+IntelliJIDE+Maven)]:http://jq.qq.com/?_wv=1027&k=L2rbHv 一:quartz简介 OpenSymphony 的Quartz提供了一个比较完美的任务调度解决方案. Quartz 是个开源的作业调度框架,定时调度器,为在 Java 应用程序中进行作业调度提供了简单却强大的机制. Quartz中有两个基本概念:作业和触发器.作业是能够调度的可执行任务,触发器提供了对作业的调度 二:quartz spring配置详

Adaboost算法原理分析和实例+代码(简明易懂)

Adaboost算法原理分析和实例+代码(简明易懂) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333     本人最初了解AdaBoost算法着实是花了几天时间,才明白他的基本原理.也许是自己能力有限吧,很多资料也是看得懵懵懂懂.网上找了一下关于Adaboost算法原理分析,大都是你复制我,我摘抄你,反正我也搞不清谁是原创.有些资料给出的Adaboost实例,要么是没有代码,要么省略很多步骤,让初学者

JavaScript 身份证号有效验证详解及实例代码

JavaScript 身份证号有效验证详解及实例代码 这篇文章主要介绍了JavaScript 身份证号有效验证详解及实例代码的相关资料,需要的朋友可以参考下 JavaScript验证身份证号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 <%@ page language="jav

实现密码框默认文字效果实例代码

实现密码框默认文字效果实例代码:大家都知道很多文本框在默认情况下都有默认的提示文本,例如"请输入姓名"之类的语言,当点击文本框的时候,会清除提示语,比较人性化.但是在密码框中实现此效果可能就有点麻烦了,因为密码框不是以明文显示的,下面就介绍一下代码实例解决此问题.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="

Javascript 实现简单计算器实例代码

Javascript 实现简单计算器实例代码 这篇文章主要介绍了Javascript 实现简单计算器实例代码的相关资料,需要的朋友可以参考下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

原生js实现的创建和删除元素实例代码

原生js实现的创建和删除元素实例代码:在实际应用中,往往需要动态的创建和删除指定的元素,下面就通过代码实例介绍一下如何实现此功能.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title&g

javascript的for in实例代码

javascript的for in实例代码:for in语句一般用来穷举也就是遍历对象的属性,代码实例如下: var obj={ webName:"蚂蚁部落", address:"青岛市南区", age:2 } for(var attr in obj){ console.log(attr); } 以上代码可以遍历对象的每一个属性.更多for in相关内容可以参阅javascript的for in循环语句详细介绍一章节. 原文地址是:http://www.softwh

js实现的div拖动效果实例代码

js实现的div拖动效果实例代码:div的拖动效果在很多效果中都有应用,当然还有很多附加的功能,本章节只是给拖动效果,并介绍一下它的实现过程.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <t

文本框输入数字倒计实例代码

文本框输入数字倒计实例代码:一般情况下,文本框中文字的个数并不是无限的,也就是说具有一定的限制,在人性化程度较好的网站一般有输入文字倒计效果,这样可以便于浏览者组织语言,下面就简单介绍一下如何实现此效果.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <title>文本框输入文字倒计实例代码-蚂蚁部落</title> <style t