您的位置:首页 > 其它

堆排序

2017-10-06 15:04 127 查看
原来最大的敌人一直都是自己,堆排序有那么难吗?竟然胆怯到现在才把它KO了。。。

堆排序:

难点:建堆

时间复杂度:O(nlogn)

空间复杂度:O(1), 就地排序,没有使用额外的存储空间

稳定性:不稳定

特点:不适合待排数据数量少的情况

具体算法流程:见(大话数据结构分析,分析的很好)

代码实现:

#include <iostream>
#include <stdio.h>

using namespace std;

void HeapAjust(int *data,int s,int length){
int j,temp=data[s];
for (j=2*s;j<=length;j*=2)
{
if (j<length && data[j]<data[j+1])//j<m是为了防止溢出
{
j++;
}
if (temp>=data[j])
{
break;
}
data[s]=data[j];
s=j;
}
data[s]=temp;
}

void swap(int *data,int i,int j){
int temp=data[i];
data[i]=data[j];
data[j]=temp;
}

void HeapSort(int *data,int length){
for (int i=length/2;i>0;i--)
{
HeapAjust(data,i,length);
}
for (int i=length;i>0;i--)
{
swap(data,1,i);
HeapAjust(data,1,i-1);
}
}
int main(char* argv[],int argc){
int data[]={-1,50,10,90,30,70,40,80,60,20};
HeapSort(data,9);
for(int i=1;i<10;i++){
cout<<data[i]<<" ";
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: