当前位置: 首页 > 知识库问答 >
问题:

在C语言中合并排序数组时出现问题

赵智勇
2023-03-14

我正在努力解决这个问题,合并两个排序数组(或在这个特定情况下的向量)。当将向量元素记录到控制台时,我得到了非常奇怪的输出。我的理想输出将是所有按顺序排列的数字。

代码如下:

#include <iostream>
#include <vector>
using namespace std;

int main() {
  vector<int> vec1 = {0, 3, 4, 31};
  vector<int> vec2 = {4, 6, 30};

  vector<int>::iterator it1 = vec1.begin();
  auto it2 = vec2.begin();

  bool keep_going = true;

  for ( ; it2 != vec2.end(); it2++) {
    for ( ; it1 != vec1.end() && keep_going; it1++) {
      if (*it1 < *it2) {
        vec1.insert(it1, *it2);
        keep_going = false;
      }
    }
    keep_going = true;
  }

  for (int i = 0; i < vec1.size(); i++) {
    cout << vec1[i] << endl;
  }

  return 0;
}

以下是控制台的说明:

49
0
4
0
3
4
31
free(): invalid pointer
exited, aborted

共有1个答案

全卜霸
2023-03-14

假设您有不使用std::合并的原因,它可以手工完成,前提是:

  • 您没有使用嵌套循环

合并操作可以编码为:

  while(it2 != vec2.end()) {                             // loop while smth to insert
    while((it1 != vec1.end()) && (*it1 <= *it2)) it1++;  // search in vec1 where to insert
    int i = it1 - vec1.begin();                          // store the position
    vec1.insert(it1, *it2++);                            // insert the value
    it1 = vec1.begin() + i + 1;                          // and restore the iterator
  }
 类似资料:
  • 我正在学习如何在c中实现Mergesort,遇到了以下问题。 这是我的合并函数,它将两个排序数组合并为一个排序数组。 在任何时候,我都使用代码A或代码B。当我使用代码A时,函数按预期执行。然而,当我使用CODE B时,函数会用随机数据填充数组列表。 printArray是一个自定义函数,用于打印数组、列表。当对一组数字{4,2,6,9}进行排序时,我从printArray函数中得到以下输出:

  • 如果在这个程序中,我正在输入一个大小7.so的数组从main()merge_sort(arr,0,6)被传递到相应的函数后,条件被检查,如果(0 但我能够理解合并排序(arr,mid1,high);有人打电话吗?但这个程序运行良好。请解释编译器如何调用merge_sort(arr、mid 1、high)

  • 本文向大家介绍Objective-C语言排序数组,包括了Objective-C语言排序数组的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 我的任务是用C#为二维数组创建合并排序算法。数组看起来像这样 我需要从文件中取数组并按x的升序对行进行排序,同时程序要检查是否有相同x值同时不同Y值的坐标对,当数组排序后,程序要将其写入文件中。我已经为一维数组创建了算法,但是不懂如何为二维数组重写算法,这是我的代码,请帮助我

  • 我应该编写一个函数来合并(将一个放在另一个的末尾)两个单独链接的列表。用户向控制台输入一系列数字,例如:1 2 3 4 0(0表示输入结束,不是列表中的元素)。这些数字被放入链表中,链表现在看起来是这样的:1 2 3 4。这个过程再次重复,直到我们有两个不同的链表。然后,合并函数被称为“void merge(结构节点头1,结构节点头2)”。打印新列表后,程序结束。 我的想法是首先将指针指向第一个列

  • 我正在玩排序数组,我弄清楚了如何对int数组进行合并排序。但是我不知道合并字符串数组。在正常排序时,对字符串数组进行排序很容易,但合并排序不同。我到目前为止所做的代码如下,正在处理int数组。