堆排序 heapsort(大根堆) c++

//堆排序heapSort:分为建堆和利用堆排序两部分,每次输出堆顶元素,然后把堆顶和堆末元素交换
再对前n-1个元素(因为最大元素已经输出不再参与下次建堆过程)的堆排序(只需调整arr[1])。
//不稳定 时间O(n)=nlog2 (n) 空间O(1),在交换堆首位元素用到 大文件作用明显
#include
#include
#define MAX 11
using namespace std;
int list[MAX];
void heapAdjust(int arr[],int curr,int n)
{
//adjust the current node "curr" to construct the big heap which contains "n" nodes
int child=2*curr;
while(child<=n)
{
if(child child+=1;
}
if(arr[child] break;
else
{
swap(arr[child],arr[curr]);
curr=child;
child*=2;
}
}
}
void heapSort(int arr[]){
int i;
for(i=(MAX-1)/2;i>0;i--)
heapAdjust(list,i,MAX-1);
for(i=MAX-1;i>0;i--)
{
swap(arr[i],arr[1]);
heapAdjust(arr,1,i-1);
cout< }
}
int main()
{
ifstream cin("in.txt");
for(int i=1;i cin>>list[i];
}
heapSort(list);
return 0;
}

你可能感兴趣的:(堆排序 heapsort(大根堆) c++)