堆排序

来源:互联网 发布:单片机ram rom flash 编辑:程序博客网 时间:2024/06/11 00:56
#include <iostream>#include <ctime>using namespace std;void adjust(int *a, int i, int n){    int large, l;    while(i*2+1 < n)    {        large = i;        l = i*2 + 1;        if(a[l]>a[i])            large = l;        if(l+1<n && a[l+1]>a[large])            large = l+1;        if(large == i)            return ;        swap(a[i], a[large]);        i = large;    }}void heap_sort(int* a, int n){    int m = (n-2)/2;    int i;    for(i=m; i>=0; i--)        adjust(a, i, n);    for(i=n-1; i>0; i--)    {           swap(a[i], a[0]);        adjust(a, 0, i);    }}int main(){    int len = 20;    int *a = new int[len];    srand((unsigned)time(0));    int i;    cout<<"before sort:"<<endl;    for(i=0; i<len; i++)    {        a[i] = rand()%100;        cout<<a[i]<<" ";    }    cout<<endl<<"after sort:"<<endl;        heap_sort(a, len);    for(i=0; i<len; i++)    {        cout<<a[i]<<" ";    }    cout<<endl;    return 0;}