Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 阵列配分函数_C++_Arrays - Fatal编程技术网

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);
    }