C 为什么;中间=arr[(beg&x2B;end)/2]“;出问题了?
我用c实现了C 为什么;中间=arr[(beg&x2B;end)/2]“;出问题了?,c,C,我用c实现了quick\u select,但是我的代码出错了,我花了很长时间才找到原因,但我仍然无法理解 功能get\u pivot是为quick\u select找到一个pivot,下面是错误的代码: int get_pivot(int*arr, int beg, int end) { int middle = arr[(beg + end) / 2]; if (middle < arr[beg]) swap(&
quick\u select
,但是我的代码出错了,我花了很长时间才找到原因,但我仍然无法理解
功能get\u pivot
是为quick\u select
找到一个pivot,下面是错误的代码:
int get_pivot(int*arr, int beg, int end)
{
int middle = arr[(beg + end) / 2];
if (middle < arr[beg])
swap(&middle, &arr[beg]);
if (arr[end] < arr[beg])
swap(&arr[beg], &arr[end]);
if (middle>arr[end])
swap(&middle, &arr[end]);
swap(&middle, &arr[end - 1]);
return arr[end - 1];
}
我不明白为什么intmiddle=arr[(beg+end)/2]代码>出错
我真的很感谢你的帮助 由于这一行(以及后面类似的行),它出错了
middle
是一个单独的变量,使用上述方法交换时,数组中的实际元素(array[middle]
)不会被交换(这是您需要的)
您想交换数组的索引beg
和中间
中的元素。这可以通过这样做来实现
swap(&arr[middle], &arr[beg]);
如果数组中包含的内容根本不能转换为int
,那么问题就更明显了。如果是这样的话,前一段代码将无法编译,而拿铁咖啡将面临战斗的机会。此外,表达式还包含多个子表达式。以下哪一个子表达式没有您期望的值?您也可以这样写:swap(arr+middle,arr+beg);非常感谢!我会小心的@东星石,你明白问题所在吗?@Haris是的!我没有交换数组中的两个数字,只是交换了数组中的一个数字。@dongxingshi,是的。美好的享受编码乐趣。:)
swap(&middle, &arr[beg]);
swap(&arr[middle], &arr[beg]);