void selectsort(int* arr,int size)
{
assert(arr);
int maxpos=0;
for(int i=0;i<size-1;i++)
{
for(int j=1;j<size-i;j++)
{
if(arr[maxpos]<arr[j])
{
maxpos=j;
}
}
if(maxpos!=size-1)
std::swap(arr[maxpos],arr[size-1-i]);
size--;
}
}
堆排
void Heapadjust(int* arr,size_t size,int root)
{
int child=root*2+1;
while(child<size)
{
if(child+1<size && arr[child+1]>arr[child])
{
child=child+1;
}
if(arr[child]<arr[root])
{
std::swap(arr[child],arr[root]);
root=child;
child=child*2+1;
}
else
{break;
}
}
}
void heapsort(int* arr,size_t size)
{
assert(arr);
int root=size/2-1;
for(;root>=0;--root)
{
Heapadjust(arr,size,root);
}
for(size=size-1;size>0;--size)
{
std::swap(arr[0],arr[size]);
Heapadjust(arr,size,0);
}
}
{
assert(arr);
int maxpos=0;
for(int i=0;i<size-1;i++)
{
for(int j=1;j<size-i;j++)
{
if(arr[maxpos]<arr[j])
{
maxpos=j;
}
}
if(maxpos!=size-1)
std::swap(arr[maxpos],arr[size-1-i]);
size--;
}
}
堆排
void Heapadjust(int* arr,size_t size,int root)
{
int child=root*2+1;
while(child<size)
{
if(child+1<size && arr[child+1]>arr[child])
{
child=child+1;
}
if(arr[child]<arr[root])
{
std::swap(arr[child],arr[root]);
root=child;
child=child*2+1;
}
else
{break;
}
}
}
void heapsort(int* arr,size_t size)
{
assert(arr);
int root=size/2-1;
for(;root>=0;--root)
{
Heapadjust(arr,size,root);
}
for(size=size-1;size>0;--size)
{
std::swap(arr[0],arr[size]);
Heapadjust(arr,size,0);
}
}