码迷,mamicode.com
首页 > 编程语言 > 详细

堆排序

时间:2018-01-13 14:23:44      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:while   insert   swap   wap   post   log   print   using   return   

//heapsort
#include<bits/stdc++.h>
using namespace std;
const int maxn =105;
int a[maxn];
int n;

void HeapInsert(int a[],int index)
{
    while(a[index] > a[(index-1)/2])
    {
        swap(a[index],a[(index-1)/2]);
        index = (index - 1) / 2;
    }
}
void Heapify(int a[], int index, int size)
{
    int left = index * 2 + 1;
    while(left < size)
    {
        int largest = left + 1 < size && a[left+1] > a[left] ? left + 1 : left;
        largest = a[largest] > a[index] ? largest : index;
        if(largest == index)
        {
            break;
        }
        swap(a[largest], a[index]);
        index = largest;
        left = index * 2 + 1;
    }
}
void HeapSort(int a[])
{
    for(int i = 0 ; i < n; i++)
        HeapInsert(a,i);
    int size = n;
    swap(a[0],a[--size]);
    while(size > 0)
    {
        Heapify(a , 0 ,size);
        swap(a[0],a[--size]);
    }
}

int main()
{
    while(~scanf("%d",&n))
    {
        for(int i =0 ; i < n; i++)
            scanf("%d",&a[i]);
        HeapSort(a);
        for(int i = 0; i < n; i++)
            printf("%d ",a[i]);
        printf("\n");
    }   return 0;
}
/*
5
5 31 0 1 6
6
9 0 22 1 88 6
*/

 

堆排序

标签:while   insert   swap   wap   post   log   print   using   return   

原文地址:https://www.cnblogs.com/hhkobeww/p/8278897.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!