aptenodytesfosteri 2016-04-03 14:17
浏览 646

算法问题:随机时间选择求中位数超出内存限制如何修改

求问:怎么修改才能减少内存占用,还是我写的算法本身不行得重写?

#define MAX 8365000
#include //中位数
#include
#include

long long int randomizedselect(long long int a[],long long int left,long long int right,long long int i);
long long int randomizedpartition(long long int a[],long long int left,long long int right);
long long int partition(long long int a[],long long int left,long long int right);
int swap(long long int,long long int);

long long int a[MAX];
int main()
{
long long int n,m,m1,m2,i;

scanf("%lld",&n);
for (i = 1;i <= n;++i)
{
    scanf("%d",&a[i]);
}

if(n%2 == 1)
    m = randomizedselect(a,1,n,(n+1)/2);
else if(n%2 == 0)
{
    m1 = randomizedselect(a,1,n,n/2);
    m2 = randomizedselect(a,1,n,(n+2)/2);
    m = (m1 + m2)/2;
}

printf("%lld",m);

}

long long int randomizedselect(long long int a[],long long int left,long long int right,long long int i)
{
long long int q,k;
if(left == right)
return a[left];

q = partition(a,left,right);//返回是划分哨兵的最后位置 
k = q-left+1;
if(i == k)
    return a[q];
else if (i < k)
        return randomizedselect(a,left,q-1,i);
else
    return randomizedselect(a,q+1,right,i-k);

}

/*long long int randomizedpartition(long long int a[],long long int left,long long int right)
{
long long int i;
srand((unsigned)time(NULL));
i = rand()%(right - left + 1)+left;//产生left和right之间的随机值
swap(right,i);

return partition(a,left,right);

}*/

long long int partition(long long int a[],long long int left,long long int right)
{
long long int x,i,j;
x = a[right];
i = left - 1;
for (j = left;j <= right-1;++j)
{
if(a[j] <= x)
{
i++;
swap(i,j);
}
}
swap(i+1,right);
return i+1;//划分值的位置
}
int swap(long long int x,long long int y)
{
int temp;
temp = a[x];
a[x] = a[y];
a[y] = temp;
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
    • ¥20 matlab yalmip kkt 双层优化问题
    • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
    • ¥88 实在没有想法,需要个思路
    • ¥15 MATLAB报错输入参数太多
    • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
    • ¥15 有赏,i卡绘世画不出
    • ¥15 如何用stata画出文献中常见的安慰剂检验图
    • ¥15 c语言链表结构体数据插入
    • ¥40 使用MATLAB解答线性代数问题