Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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++的书工作,我对一个挑战性的问题有点困惑。我正在学习指针,在这个特殊的问题中,我需要对一个结构数组(使用指针)进行排序,其中包含一个学生姓名字符串和他们的两倍分数。在排序之后,结构的数据成员显然仍然需要匹配(即,正确的名称仍然需要与其分数匹配)_C++_Sorting_Pointers_Selection_Structure - Fatal编程技术网

C++;结构数组的选择排序 我正在通过一本C++的书工作,我对一个挑战性的问题有点困惑。我正在学习指针,在这个特殊的问题中,我需要对一个结构数组(使用指针)进行排序,其中包含一个学生姓名字符串和他们的两倍分数。在排序之后,结构的数据成员显然仍然需要匹配(即,正确的名称仍然需要与其分数匹配)

C++;结构数组的选择排序 我正在通过一本C++的书工作,我对一个挑战性的问题有点困惑。我正在学习指针,在这个特殊的问题中,我需要对一个结构数组(使用指针)进行排序,其中包含一个学生姓名字符串和他们的两倍分数。在排序之后,结构的数据成员显然仍然需要匹配(即,正确的名称仍然需要与其分数匹配),c++,sorting,pointers,selection,structure,C++,Sorting,Pointers,Selection,Structure,这就是我的问题所在。到目前为止,我已经把分数按升序排列好了,但是名字都混在一起了。我还没有弄清楚原因,部分原因是我仍在努力完全理解指针以及如何使用它们。我可以正确地进行冒泡排序,将姓名与分数保持一致,但不能进行选择排序。任何帮助都将不胜感激 以下是我用于选择排序的函数: void selection_sort(Student *ptr, int size) // selection sort - having some problems { int start, min_index,

这就是我的问题所在。到目前为止,我已经把分数按升序排列好了,但是名字都混在一起了。我还没有弄清楚原因,部分原因是我仍在努力完全理解指针以及如何使用它们。我可以正确地进行冒泡排序,将姓名与分数保持一致,但不能进行选择排序。任何帮助都将不胜感激

以下是我用于选择排序的函数:

void selection_sort(Student *ptr, int size) // selection sort - having some problems
{
  int start,
    min_index,
    min_value;

  for (start = 0; start < (size - 1); start++) {
    min_index = start;
    min_value = (ptr+start)->score;
    for (int index = start+1; index < size; index++) {
      if ( (ptr+index)->score < min_value) {
    min_value = (ptr+index)->score;
    min_index = index;
      }
    }
    // the following line is where, i think, the problem is, but i haven't
    // been able to figure out the solution, despite trying numerous approaches
    *(ptr+min_index) = *(ptr+start);
    (ptr+start)->score = min_value;
  }
}
void selection\u sort(Student*ptr,int size)//选择排序-有一些问题
{
int start,
min_指数,
最小值;
对于(开始=0;开始<(大小-1);开始++){
最小指数=开始;
最小值=(ptr+开始)->分数;
对于(int index=start+1;index分数<最小值){
最小值=(ptr+指数)->得分;
最小指数=指数;
}
}
//下面这一行是问题所在,我想,但我没有
//尽管尝试了许多方法,我们仍然能够找到解决方案
*(ptr+min_索引)=*(ptr+start);
(ptr+开始)->分数=最小值;
}
}

这就是我所拥有的。我对排序算法也不是很在行,这对我来说都是新鲜事,所以我希望它不会搞得一团糟。如果在这些领域有知识的人能给我指出正确的方向,那就太棒了。

我认为你应该使用标准库中的memcpy函数

还有一件事:

*(ptr+min_index) = *(ptr+start); 

这一行似乎覆盖了数据,但并没有像应该的那样交换它们

我认为您应该在标准库中使用memcpy函数

还有一件事:

*(ptr+min_index) = *(ptr+start); 

这一行似乎覆盖了数据,但并没有像应该的那样交换它们

首先,我想给你一个提示:不要使用语法
*(ptr+min\u index)
你可以使用
ptr[min\u index]
,它也会有同样的效果。我相信这个版本更自然

第二,你的问题。您应该交换
ptr[min_index]
ptr[start]
,而不是将其中一个的值复制到另一个。 而不是:

*(ptr+min_index) = *(ptr+start);
(ptr+start)->score = min_value;
写下:

Student temp = ptr[start];
ptr[min_index] = ptr[start];
ptr[start] = temp;

或者如果你使用C++,只需使用交换函数:

std::swap(ptr[min_index], ptr[start]);
为什么你应该交换而不是你目前正在做的事情?那么,您应该保留
ptr[minu index]
中的所有字段,以便能够将它们分配给ptr[start]


希望这有帮助

首先,我想给你一个提示:不要使用语法
*(ptr+min\u index)
你可以使用
ptr[min\u index]
,它也会有同样的效果。我相信这个版本更自然

第二,你的问题。您应该交换
ptr[min_index]
ptr[start]
,而不是将其中一个的值复制到另一个。 而不是:

*(ptr+min_index) = *(ptr+start);
(ptr+start)->score = min_value;
写下:

Student temp = ptr[start];
ptr[min_index] = ptr[start];
ptr[start] = temp;

或者如果你使用C++,只需使用交换函数:

std::swap(ptr[min_index], ptr[start]);
为什么你应该交换而不是你目前正在做的事情?那么,您应该保留
ptr[minu index]
中的所有字段,以便能够将它们分配给ptr[start]


希望这有帮助
 *(ptr+min_index) = *(ptr+start); 
如果您的学生类在其成员属性中有任何指针,则可以有意义


和你必须使用交换而不是分配.< /p>

C++中的第一节课:C++中,我们有操作符重载,所以这样的行:

 *(ptr+min_index) = *(ptr+start); 
如果您的学生类在其成员属性中有任何指针,则可以有意义


并且必须使用交换,而不是只赋值。

在C++中,不将指针和大小作为函数的参数传递。相反,使用标准容器(例如向量),并传递一个开始和结束迭代器。在C++中,一个不将指针和大小作为函数的参数传递。相反,我们使用一个标准容器(比如向量)并传递一个开始迭代器和一个结束迭代器。啊……这就是值被覆盖的原因。谢谢你,伙计。而且,你是对的,ptr[index]看起来好多了。啊……这就是为什么这些值被覆盖的原因。谢谢你,伙计。而且,你说得对,ptr[index]看起来好多了。