[有错误]堆排序的实现 java
#include<iostream>
using namespace std;
//大根堆,从小到达排序
int a[];
void swap(int &a,int &b)
{
a=a^b;
b=a^b;
a=a^b; }
void adjust(int *a,int root,int len)
{
int max=root;
int left=*root;
int right=*root+;
if(left<=len&&a[max]<a[left])
{
max=left; } if(right<=len&&a[max]<a[right])
{
max=right; }
if(max!=root)
{
swap(a[max],a[root]); adjust(a,max,len); } }
void bulidHeap(int *a,int len)
{ for(int i=len/;i>=;i--)
{
adjust(a,i,len); } } void heapSort(int *a,int len)
{
if(len>)
{
swap(a[],a[len]);
adjust(a,,len-);//调整为堆
heapSort(a,len-); } }
void output(int *a,int len)
{
for(int i=;i<=len;i++)
{
cout<<a[i]<<" "; }
cout<<endl; } int main()
{ while(!cin.eof())
{
int len;
cin>>len;
for(int i=;i<=len;i++)
{
cin>>a[i];
} bulidHeap(a,len); heapSort(a,len);
output(a,len); } return ; }
//一个大根堆的例子
//author:张小二
public class HeapSort {
public static void swap(int a[],int i,int j)
{ int temp=a[i];
a[i]=a[j];
a[j]=temp; }
//最重要的自上而下调整的方法。,最多的代码在此处,建队和堆排序都是靠他。
public static void adjust(int a[],int i,int len)//调整以i为根
{ while(true)
{
int largest=i;//寻找 i,2i+1,2i+2中的最大值
int r=2*i;
int l=2*i+1;
if(r<len&&a[r]>a[largest]) largest=r;
if(l<len&&a[l]>a[largest]) largest=l;
if(largest==i) break; swap(a,i,largest);
i=largest; } }
//建立堆,从最后一个非叶子开始
public static void bulid(int a[],int len)
{
display(a);
len=len-1;
for(int i=len/2;i>=0;i--)
{
adjust(a,i,len); } }
//堆排序
public static void heapSort(int a[])
{
bulid(a,a.length); int len=a.length-1;
while(len<1)
{
swap(a,0,len);
adjust(a,0,len);
len--; }
//after
display(a);
} public static void display(int a[])
{
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
System.out.println(); } /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]={3,-3,5,6,-7,9,45};
heapSort(a); } }
[有错误]堆排序的实现 java的更多相关文章
- eclipse出现错误:he type java.util.Map$Entry cannot be resolved. It is indirectly referenced
eclipse出现错误:he type java.util.Map$Entry cannot be resolved. It is indirectly referenced jre 换成6的就好了选 ...
- 安装JavaJDK没有jre环境的解决办法 错误: C:\Program Files\Java\jdk-11.0.7\jre
安装JDK11 发先没有jre解决办法 在安装目录下执行 bin\jlink.exe --module-path jmods --add-modules java.desktop --output j ...
- 开发错误记录13:java.lang.UnsatisfiedLinkError: Couldn't load xxx.so: findLibrary returned null
今天在导入环信开发包时,编译报如下错: java.lang.UnsatisfiedLinkError: Couldn't load hyphenate_av from loader dalvik.sy ...
- android常见错误-E/AndroidRuntime(13678): java.lang.NoClassDefFoundError:
08-01 11:09:39.791: E/AndroidRuntime(13678): FATAL EXCEPTION: main 08-01 11:09:39.791: E/AndroidRunt ...
- springmvc错误 Spring3.X jdk8 java.lang.IllegalArgumentException
最近在学习springmvc--碰到一个特别蛋疼的错误 javax.servlet.ServletException: Servlet.init() for servlet springMVC thr ...
- 页面提交错误,页面间参数传递java.lang.NumberFormatException: null
多次出现这样的错误,在点击一个按钮触发提交整个页面的事件时,总是报错,不止一次出现这样的错误了. 出现这种问题的分析: 1 我们从这个问题的本身来看,java.lang.NumberFormatExc ...
- 安装JDK出现错误:-bash: /usr/java/jdk1.7.0_71/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory解决办法
1.错误描述:安装好jdk之后,通过java -version,javac,java等命令测试是否安装成功时出现错误-bash: /usr/java/jdk1.7.0_71/bin/java: /li ...
- 堆排序算法的java实现
堆积排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素.堆排序是不稳定的排序方法,辅助空间为O(1), 最坏时间复杂度为O ...
- sqoop导出hive数据到mysql错误: Caused by: java.lang.RuntimeException: Can't parse input data
Sqoop Export数据到本地数据库时出现错误,命令如下: sqoop export \ --connect 'jdbc:mysql://202.193.60.117/dataweb?useUni ...
随机推荐
- 简单的NHibernate学习笔记
NHibernate是.NET平台下的ORM框架,与ADO.NET一样实现项目中数据库与项目系统的交互. .首先要用NHibernate框架就要有第三方的dll库来作为支持,附上百度云下载地址:(链接 ...
- 有关C++ std::string 类的类型转换 其他语言永远无法理解的伤
最近做了个项目,C++的MFC窗口程序,一个基于dialog的学生-图书管理系统,有一些感触,最后会放上一些项目截图和部分代码提供大家参考.如果有什么好方法和建议欢迎指导. 强类型,为什么这么伤 我知 ...
- dataTable 禁止排序
$("#id").DataTable({ "ordering": false, // 禁止排序 });
- sublime c++ builder
rt, mark { "cmd": ["g++", "${file}", "-o", "${file_path ...
- 关于javac编译时出现“非法字符:\65279”的解决方法
一般用UE或记事本编辑过的UTF-8的文件头会加入BOM标识,该标识由3个char组成.在UTF-8的标准里该BOM标识是可有可无的,Sun 的javac 在编译带有BOM的UTF-8的格式的文件时会 ...
- objective-c常用数学方法
1. 三角函数 double sin (double);正弦 double cos (double);余弦 double tan (double);正切 2 .反三角函数 double as ...
- jquery dom ready, jqery2.1.1实现-源码分析
本文链接http://www.cnblogs.com/Bond/p/4178311.html jquery document ready的实现其很很简,虽说简单,其很很多人还是没去关注过它的实现.我 ...
- shell中的内建命令, 函数和外部命令
转自shell中的内建命令, 函数和外部命令 Shell识别三种基本命令:内建命令.Shell函数以及外部命令: (1)内建命令就是由Shell本身所执行的命令. 有些命令是由于其必要性才内建的 ...
- [jobdu]第一个只出现一次的字符
刚开始还在想双指针,完全没必要.然后最土的可以扫两遍O(n),用一个数组记录出现次数.然后想到如果数组里记录出现的位置,可以只扫一遍O(n),第二遍扫字符集就行了. #include <iost ...
- ArcGis 在线地图相关资源
原文:ArcGis 在线地图相关资源 世界边界和地点:http://services.arcgisonline.com/ArcGIS/rest/services/Reference/World_Bou ...