堆排序 c语言实现

在这里插入图片描述

算法特点:
1.不稳定排序
2.只能用于顺序结构,不能用于链式结构
3.初始建堆所需比较次数较多,因此记录数较少不宜采用。堆排序在最坏情况下时间复杂度为O(nlogn)相对于快速排序的O(n*n)而言是一个优点,当记录比较多时较为高效。

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
void HeapAdjust(int *a,int s,int length){
    
    
    int t=a[s];
    for(int i=2*s;i<=length;i=i*2){
    
    
            if(i+1<=length&&a[i]<a[i+1]) i=i+1;
            if(t>a[i]) break;
            a[s]=a[i];s=i;
    }
    a[s]=t;

}
void CreatHead(int *a,int x){
    
    
for(int i=x/2;i>0;i--)
    HeapAdjust(a,i,x);
}

void HeapSort(int *a,int length){
    
    
    CreatHead(a,length);
    for(int i=length;i>1;i--){
    
    
        int x=a[1];
        a[1]=a[i];
        a[i]=x;
        HeapAdjust(a,1,i-1);
    }

}

int main()
{
    
    
    int a[9]={
    
    0,49,38,65,97,76,13,27,49};
    HeapSort(a,8);
    for(int i=1;i<=8;i++)
        cout<<a[i]<<" ";
    //cout << "Hello world!" << endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/changbaishannefu/article/details/111596428