问题描述
用特定的分治策略,选第K小的元素
解析![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4b4dc5bbf02fb19e4e8408d7bef3103b.png)
代码
#include <stdio.h>
#include <stdlib.h>
void merge(int a[],int left,int mid,int right) //二分归并排序
{
int i,k;
int *tmp = (int *)malloc((right-left+1)*sizeof(int));
int left1=left;
int left2=mid;
int right1=mid+1;
int right2=right;
for(k=0;left1<=left2 && right1<=right2;k++)
{
if(a[left1]<=a[right1])
{
tmp[k]=a[left1++];
}
else
{
tmp[k]=a[right1