使用向量合并排序(int)C ++

用户5056973

我似乎无法弄清楚我的代码出了什么问题。如标题所述,我正在尝试使用整数向量实现合并排序。

标题:

using Val = int;
using Container = std::vector<Val>;
using Iter = long;
void mergeSort(Container& arr, Iter start, Iter end);

.CPP(我已经在文件中包括了合并的定义,只是这里没有显示)

void mergeSort(Container& arr, Iter start, Iter end) {

if (start >= end) return;

int mid = (start + end) / 2;

mergeSort(arr, start, mid);
mergeSort(arr, mid + 1, end);
merge(arr, start, end, mid);


}

void merge(Container& arr, Iter start, Iter end, Iter mid)
{

int len = end - start + 1;
int x = 0;
Container temp;

temp.resize(arr.size());

int i, j, k;
i = start;
k = start;
j = mid + 1;

while (i <= mid && j <= end)
{
    if (arr[i] < arr[j])
    {
        temp[k++] = arr[i++];
    }
    else
    {
        temp[k++] = arr[j++];
    }
}



while (i <= mid) temp[k++] = arr[i++];


while (j <= end) temp[k++] = arr[j++];

for (k = 0; k < len; k++) arr[k + start] = temp[k];

}

非常感谢!

杀手

我认为您的代码可能存在四个问题。

  1. 您假设序列<start,mid><mid+1,end>已排序。如果这个条件不成立(例如merge(v,0,3,2){6,5,7,4})的算法将给出不正确的结果。
  2. 使用end函数时(例如merge(v,0,4,2),在数组上)使用的值不正确{6,5,7,4}。您始终必须进行迭代<0,size-1>
  3. 如前所述,k应该始终初始化为0。您想将已排序的序列插入已排序数组的开头。
  4. 您假设参数mid是index,而不是position数组元素的。例如,在merge(v,0,3,2)上会产生不正确的结果{1,6,2,4},因为在函数中,您将序列从index排序mid+1=2+1=33只包含{4}因此,您的第一部分{1,6,2}未排序,这是算法所必需的。

解决方案是:

  1. 将k初始化为0。
  2. 检查是否mid<end
  3. 排序<0,mid><mid+1,end>使用其他排序算法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Int C ++数组上合并排序

来自分类Dev

C ++使用迭代器合并排序

来自分类Dev

我正在尝试使用c ++中的向量来实现(算法简介(CLRS))中的合并排序算法,但数组未排序,

来自分类Dev

在合并排序C ++中使用合并时的随机值

来自分类Dev

在C ++中合并排序

来自分类Dev

使用合并排序排序(名称)

来自分类Dev

C ++ 11多线程合并排序

来自分类Dev

合并排序循环链表C

来自分类Dev

在Objective-C中合并排序

来自分类Dev

在C中调试合并排序实现

来自分类Dev

合并排序分段错误c ++

来自分类Dev

C ++-合并排序-无法识别错误

来自分类Dev

合并时合并排序使用什么排序技术

来自分类Dev

合并排序变体:使用链接数组

来自分类Dev

使用递归合并排序算法

来自分类Dev

使用合并排序的反转次数

来自分类Dev

使用合并排序计算反转次数

来自分类Dev

使用合并排序计数比较

来自分类Dev

使用合并排序,Swift计算倒数

来自分类Dev

是否可以使用合并排序(C#)根据多个条件对数组进行排序?

来自分类Dev

合并排序算法中的 C++“以未捕获的 std::out_of_range 类型异常终止:向量”错误

来自分类Dev

我尝试为学校项目使用向量创建合并排序。没有得到想要的输出

来自分类Dev

分而治之:合并排序

来自分类Dev

合并排序

来自分类Dev

合并排序算法

来自分类Dev

合并排序比较

来自分类Dev

合并排序对

来自分类Dev

合并排序比较

来自分类Dev

合并排序中的无序类型“ int()<= list()”