选择排序
void select_sort(int *arr,int size)
{
int tmp=0;
for(int i=0;i<size-1;i++)
{
for(int j=i+1;j<size;j++)
{
if(arr[j]<arr[i])
{
tmp=arr[j];
arr[j]=arr[i];
arr[i]=tmp;
}
}
}
}
堆排序
void AdjustDown(int *arr,int size,int root)
{
int parent=root;
//左孩子
int child=root*2+1;
while(child<size)
{
if(child+1<size&&arr[child+1]>arr[child])
child+=1;
if(arr[child]>arr[parent])
{
std::swap(arr[parent],arr[child]);
parent=child;
child=parent*2+1;
}
else
break;
}
}
void heap_sort(int *arr,int size)
{
//创建堆
for(int i=(size-2)>>1;i>=0;i--)
{
AdjustDown(arr,size,i);
}
//排序
for(int j=size-1;j>0;j--)
{
std::swap(arr[0],arr[j]);
AdjustDown(arr,j,0);
}
}