树形选择排序

来源:互联网 发布:淘宝霸王条款 编辑:程序博客网 时间:2024/05/22 17:49

时间复杂度nlogn, 空间复杂度n,这是不稳定排序方法

//树形选择排序#include<iostream>#include<cstdio>using namespace std;int q[100],l[100];void creInitTree(int l[],int n){    int m=2*n-1;    for(int i=n;i<=m;i++)        q[i]=l[i-n+1];    for(int i=n-1;i>=1;i--)        q[i]=q[i*2]<=q[i*2+1]?q[i*2]:q[i*2+1];}int Max(int l[],int n){    int m=l[1];    for(int i=2;i<=n;i++)        if(l[i]>m) m=l[i];    return m;}void TreeSort(int q[],int l[],int n){    l[1]=q[1];    int m=Max(l,n);    for(int i=2;i<=n;i++)    {        int j=1;        while(j<n) j=q[j*2]<=q[j*2+1]?j*2:j*2+1;        q[j]=m;        while(j>1)        {            j/=2;            q[j]=q[j*2]<=q[j*2+1]?q[j*2]:q[j*2+1];        }        l[i]=q[1];    }}int main(){    int n;    scanf("%d",&n);    for(int i=1;i<=n;i++)        scanf("%d",&l[i]);    creInitTree(l,n);    TreeSort(q,l,n);    for(int i=1;i<=n;i++)        printf("%d ",l[i]);    printf("\n");    return 0;}


0 0
原创粉丝点击