static void swap(int* left,int *right)
{
int tmp=*left;
*left=*right;
*right=tmp;
}
void adjustdown(int* arr,int i,int end)
{
int key=arr[i];
int p=i;
int left=2*p+1;
while(left<=end)
{
if(key>arr[left]&&(left+1<=end)&&key>arr[left+1])
{
break;
}else if(key>arr[left]&&left+1>end)
{
break;
}else if(left+1<=end&&arr[left+1]>=arr[left]&&key<arr[left+1])
{
swap(arr+p,arr+left+1);
p=left+1;
left=2*p+1;
}else if(left+1<=end&&arr[left]>arr[left+1]&&key<arr[left])
{
swap(arr+p,arr+left);
p=left;
left=2*p+1;
}else if(left+1>end&&arr[left]>key)
{
swap(arr+p,arr+left);
p=left;
left=2*p+1;
}else
{
break;
}
}
}
void heap_sort(int* arr,int len)
{
int p;
int end;
for(p=(len-2)/2;p>=0;p--)
{
adjustdown(arr,p,len-1);//len是数组长度
}
for(end=len-1;end>=1;end--)
{
swap(arr,arr+end);
adjustdown(arr,0,end-1);
}
}
void my_top(int* arr,int len,int top,int* arr_top,int top_len)
{
int index;
for(index=0;index<len;index++)
{
if(index<top)
{
if(index==0)
{
arr_top[index]=arr[index];
}else
{
int pos;
for(pos=index-1;pos>=0;pos--)
{
if(arr[index]>=arr_top[pos])
{
arr_top[pos+1]=arr_top[pos];
}else
{
break;
}
}
arr_top[pos+1]=arr[index];
}
}else
{
if(arr[index]>arr_top[0])
{
continue;
}else
{
arr_top[0]=arr[index];
adjustdown(arr_top,0,top_len-1);
}
}
}
}
堆排序及top K 算法
最新推荐文章于 2024-07-30 17:22:44 发布