gpt4 book ai didi

arrays - 用最少的 x
转载 作者:塔克拉玛干 更新时间:2023-11-03 04:15:17 26 4
gpt4 key购买 nike

这是一道面试题。假设您有一个名为 A 的包含四个整数的数组,还有这个函数:

int check(int x, int y){
if (x<=y) return 1;
return 0;
}

现在,您想要创建一个函数来对 A 进行排序,并且您只能使用函数 check 进行比较。您需要多少次check调用?
(可以为结果返回一个新数组)。

我发现我可以在 5 个调用中完成此操作。是否可以用更少的电话来做到这一点(在最坏的情况下)?

我是这样想的(伪代码):

int[4] B=new int[4];
/*
The idea: put minimum values in even cells and maximum values in odd cells using check.
Then swap (if needed) between minimum values and also between maximum values.
And finally, swap the second element (max of minimums)
and the third element (min of maximums) if needed.
*/
if (check(A[0],A[1])==1){ //A[0]<=A[1]
B[0]=A[0];
B[2]=A[1];
}
else{
B[0]=A[1];
B[2]=A[0];
}
if (check(A[2],A[3])==1){ //A[2]<=A[3]
B[1]=A[2];
B[3]=A[3];
}
else{
B[1]=A[3];
B[3]=A[2];
}
if (check(B[0],B[1])==0){ //B[0]>B[1]
swap(B[0],B[1]);
}
if (check(B[2],B[3])==0){ //B[2]>B[3]
swap(B[2],B[3]);
}
if (check(B[1],B[2])==0){ // B[1]>B[2]
swap(B[1],B[2]);
}

最佳答案

4 元素列表有 24 种可能的排序。 (4 factorial) 如果只做 4 次比较,那么你只能得到 4 位信息,这足以区分 16 种不同的情况,这不足以涵盖所有可能的输出情况。因此,5次比较是最优的最坏情况。

关于arrays - 用最少的 x<y 比较对 4 个数字进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41191541/

26 4 0

Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com