堆排序
//堆排序的一次调整
void Adjust(int *arr,int start,int end)
{
if(arr == NULL)
return ;
int tmp=arr[start];
for(int i=2*start+1;i<=end;i=2*start+1)
{
if((i+1)<=end && arr[i+1]>arr[i])
{
i++;
}
if(arr[i]>tmp)
{
arr[start]=arr[i];
start=i;
}
else
{
break;
}
}
arr[start]=tmp;
}
//堆排序 时间复杂度O(Nlogn) 空间复杂度O(1) 不稳定
//思想:先建堆,建堆的过程是从下往上(调用调整函数),再进行调整(调整的过程是从上往下),
//直到所有元素被调整完
void HeapSort(int *arr,int len)
{
if(NULL == arr)
return;
for(int i=(len-1-1)/2;i>=0;i--)
{
Adjust(arr,i,len-1);
}
for(int i=0;i