【发布时间】:2012-09-08 05:55:39
【问题描述】:
首先让我说我是 C 新手,所以我的方法是基本的。我正在尝试检查排序数组的旋转点。例如 (1 2 4 5 9) 变为 (5 9 1 2 4)。我试图将数组“拆分”为两个子数组,并检查一个从 [0] 开始并增加一和一个从 [4] 开始并减少一。这是我目前所拥有的:
#define size 5
int main(void)
{
int x, i, j, start, end;
int array1[size]= {4, 8, 0, 1, 3};
start = 0;
end = size -1;
while(start < end)
{
if (array1[start] < array1[end])
start++;
end--;
我想我遇到的一些问题是我的方法是好的(从外到内)还是应该从中间开始,然后走出去。另外,我将如何编码确定枢轴实际发生的位置。我在 SO 中看到了 C++ 的一些答案,但是我没有看到很多对 C 来说很清楚的答案,所以我想我会问。任何建议表示赞赏。
【问题讨论】:
-
因为
array1[0] == 4和array1[end] == 3和if (4 < 3)不会占用分支,所以该循环将无限期地继续。 -
我可以建议您在编译器中尝试一下吗?不是看它是否是最好的解决方案,或者它是否适用于所有情况,而是看是否有一些明显的错误,编译器会帮助你捕捉到。
-
@bardockyo
start和end永远不会改变,因此循环将无限期地继续。
标签: c arrays search pivot sorted