#include "stdafx.h"
void temp(int *l,int i,int j){
l[i]=l[i]^l[j];
l[j]=l[i]^l[j];
l[i]=l[i]^l[j];
}//使用异或有个问题,当i和j相等时,不能实现交换的目的
void HeapSort_M(int *l,int s,int m){
int temp=l[s];
for(int j=2*s;j<m;j*=2)
{
if(j<m&&l[j]<l[j+1]){
++j;
}
if(temp>l[j])
break;
l[s]=l[j];
s=j;
}
l[s]=temp;
}
void heapSort(int *l,int length){
for (int i = length/2; i >0; i--)
{
HeapSort_M(l,i,length);
}
for(int j=length;j>0;j--){
temp(l,1,j);
HeapSort_M(l,1,j-1);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[10]={0,50,10,90,30,70,40,80,60,20};
heapSort(a,9);
for(int i=1;i<10;i++)
printf("%d--",a[i]);
return 0;
}