我正在编写一个获取int
数组及其大小的函数:
void partition(int data[], int size)
数组的第一个元素被赋值给一个名为val
的变量,该函数需要对数组进行分区,使val
左侧的元素小于val
,右边的元素更大。
例如,
如果数组为:5 2 10 4 1 12 7
(val
变为5
)
输出应为2 4 1 5 10 12 7
顺序并不重要,因此1 2 4 5 12 7 10
也是有效输出
所以我写了这段代码:
void partition(int data[], int size)
{
int val = data[0];
int i = 0, j = size - 1;//array indices
while (i != j)
{
while (data[i] < val)
i++;
while (data[j] > val)
j--;
swapInArray(data, i, j);
}
}
除非得到一个元素等于val
的数组,否则它可以正常工作。
例如:7 8 5 176 18 19 7 12 44
答案 0 :(得分:2)
一些改变应该解决它。
while ( i < j )
代替while ( i != j )
。while (data[i] <= val)
代替while (data[i] < val)
这是我的建议:
void partition(int data[], int size)
{
int val = data[0];
int i = 0, j = size - 1;
while (i < j)
{
while (data[i] <= val)
i++;
while (data[j] > val)
j--;
swapInArray(data, i, j);
}
}
更新
需要做出更多改变。
swapInArray
。i < j
j
元素交换。更新功能:
void partition(int data[], int size)
{
int val = data[0];
int i = 1, j = size - 1;//array indices
while (i < j)
{
while (i < j && data[i] <= val)
i++;
while (data[j] > val)
j--;
if ( i < j )
swapInArray(data, i, j);
}
if ( val > data[j] )
swapInArray(data, 0, j);
}
在http://ideone.com/5A3wTN处查看它。