C++ 数据结构——堆排序

news/2024/5/19 5:10:38 标签: 数据结构, 堆排序
/*
 堆排序
 */
#include <iostream>
using namespace std;
int *data;
void Sift(int k,int last)
{
    int i,j,temp;
    i=k;j=2*i+1;
    while (j<=last)
    {
        if(j<last&&data[j]<data[j+1]) j++;
        if(data[i]>data[j])
            break;
        else
        {
            temp=data[i];
            data[i]=data[j];
            data[j]=temp;
            i=j;
            j=2*i+1;
        }
    }
}
void HeapSort(int length)
{
    int i,temp;
    for(i=ceil(length/2)-1;i>=0;i--)
    {
        Sift(i, length-1);
    }
    for(i=1;i<length;i++)
    {
        temp=data[0];data[0]=data[length-i];data[length-i]=temp;
        Sift(0, length-i-1);
    }
    for(int j=0;j<length;j++)
    {
        cout<<data[j]<<"\t";
    }
    cout<<endl;
}
int main()
{
    data=new int[10]{1,5,23,76,32,7,21,43,-21,44};
    HeapSort(10);
}


http://www.niftyadmin.cn/n/1096063.html

相关文章

蓝桥杯之K好数

如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字&#xff0c;那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K 4&#xff0c;L 2的时候&#xff0c;所有K好数为11、13、20、22、30、31、33 共7个。由于这个数目很大&#xff0c;请你输出它对100…

C++ 数据结构——二路归并排序(递归)

/*二路归并排序&#xff08;递归实现&#xff09;*/ #include <iostream> using namespace std; int length12; int *data; void Merge(int first1,int last1,int last2) {int *tempnew int[length];int ifirst1,jlast11,kfirst1;while (i<last1&&j<last2)…

TQ2440之DMA+IIS

DMA&#xff08;Direct Memory Access&#xff0c;直接内存访问&#xff09;是一种不经过CPU而直接从内存存取数据的数据交换模式。在需要进行大量数据交换的场合&#xff0c;用好DMA&#xff0c;可以大大提高系统的性能&#xff0c;因为DMA操作几乎不占用CPU资源。 由于是用DM…

Hibernate级联查询的分页问题

本文讨论&#xff1a;Hibernate级联查询的分页问题 在Hibernate中&#xff0c;查询实体对象的同时级联查询其关联的集合对象并对其进行分页处理&#xff0c;此时Hibernate并不是真正的分页&#xff0c;而是将数据表的全部数据加载到内存中&#xff0c;而后在内存中进行分页处理…

C++ 数据结构——二路归并(非递归实现)

/*二路归并排序&#xff08;非递归实现&#xff09;*/ #include <iostream> using namespace std; int length10; int *data; void Merge(int first,int last1,int last2) {int i,j,k;int *tempnew int[length];ifirst;jlast11;kfirst;while (i<last1&&j<l…

Java——List集合常用方法

java.util.List接口 extends Collection接口 List接口特点 有序的集合&#xff0c;存储的元素和取出元素的顺序相同 有索引 允许存储相同元素 List接口中带有索引的方法&#xff08;特有&#xff09; void add(int index,E element):将指定元素存储到指定位置 E get(int ind…

java InputStream读取数据问题【转http://cuisuqiang.iteye.com/blog/1434416】

首先请查看一下JavaAPI&#xff0c;可以看到InputStream读取流有三个方法&#xff0c;分别为read()&#xff0c;read(byte[] b),read(byte[] b, int off, int len)。其中read()方法是一次读取一个字节&#xff0c;鬼都知道效率是非常低的。所以最好是使用后面两个方法。 例如以…

蓝桥杯/第五届/写日志

【问题描述】 写日志是程序的常见任务。现在要求在 t1.log, t2.log, t3.log 三个文件间轮流写入日志。也就是说第一次写入t1.log&#xff0c;第二次写入t2.log&#xff0c;... 第四次仍然写入t1.log&#xff0c;如此反复。 下面的代码模拟了这种轮流写入不同日志文件的逻辑。 p…