C++ 阵列配分函数
我正在编写一个函数,它获取C++ 阵列配分函数,c++,arrays,C++,Arrays,我正在编写一个函数,它获取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
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);
}
}
void分区(int-data[],int-size)
{
int val=数据[0];
int i=0,j=size-1;//数组索引
而(i!=j)
{
while(数据[i]val)
j--;
swapInArray(数据,i,j);
}
}
除非它得到一个包含相当于val
的元素的数组,否则它可以正常工作
例如:
7 8 5 176 18 19 7 12 44
两个更改应该可以修复它
while(i
代替while(i!=j)
while(data[i]while(data[i]它不起作用,而且当它被更改时,现在程序崩溃了,即使输入在更改之前就工作了。另一个问题是使用while(i!=j)
而不是while(i
。仍然不工作,给function data[8]={5,2,10,4,1,12,5,7};并打印5 2 5 4 12 1 10 7我希望您现在已经开始工作了。只是一个补充意见-我想这是创建快速排序算法(或类似算法)练习的一部分因此,学习它没关系,但在现实世界中,一段高质量的代码应该充分利用标准库。使用std::array而不是原始的C样式数组;使用std::swap而不是重新创建自己的函数。仍然不起作用,给出func int数据[8]={5,2,10,4,1,12,5,7};它打印出5 2 5 4 12 1 10 7,这是因为两个内部循环在没有检查的情况下互相传递;i指向12,j指向1,然后这两个循环被交换。一旦它们相遇,你需要停止增加i和减少j。while(i
-和if(i
。我不太明白你的意思。你能告诉我代码中要做什么更改吗?我已经更新了上面的评论。另外,我认为你需要返回分区数组第二部分的第一个元素的索引;否则你不知道它是如何分区的。@KlitosKyriacou,谢谢你指出错误。现在已经修复了。
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);
}
}
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);
}