为什么我的merge_sort在c++中不工作
Why my merge_sort in c++ is not working?
这是我在c++中使用向量进行归并排序的代码。但它扔给我奇怪的结果:
结果:输入元素:11 33 12 44 99 34
已排序元素:11 33 33 44 99 99
My Header File is nothing special: "stdafx.h"
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#include <iostream>
using namespace std;
代码:#include "stdafx.h"
#include <iostream>
#include<array>
#include<vector>
//#define array_size(array) (sizeof((array))/sizeof((array[0])))
using namespace std;
template <typename T>
void merge_sort(vector<T>& arr, vector<T>& arr1, vector<T>& arr2) {
arr.clear();
int i = 0, j = 0, k = 0;
for (i = 0; i < arr1.size() && j < arr2.size(); k++) {
if (arr1.at(i) <= arr2.at(j)) {
arr.push_back(arr1.at(i));
i++;
}
else if (arr1.at(i) > arr2.at(j)) {
arr.push_back(arr1.at(j));
j++;
}
k++;
}
while (i < arr1.size()) {
arr.push_back(arr1.at(i));
i++;
}
while (j < arr2.size()) {
arr.push_back(arr2.at(j));
j++;
}
};
template <typename T>
vector<T>merge(std::vector<T>& arr) {
if (1 < arr.size()) {
vector<T> arr1(arr.begin(), arr.begin() + arr.size() / 2);
merge(arr1);//dividing to size 1
std::vector<T> arr2(arr.begin() + arr.size() / 2, arr.end());
merge(arr2);
merge_sort(arr, arr1, arr2);
}
return (arr);
//write_vector(arr);
};
int main()
{
//Merge Sort
vector<int> inputVec;
int size = 6;
for (int i = 0; i < size; i++) {
int input;
cin >> input;
inputVec.push_back(input);
}
vector<int>& newSort=merge(inputVec);
vector<int>::iterator it;
for (it = newSort.begin(); it != newSort.end(); ++it)
cout<<endl<< *it << endl;
return 0;
}
结果窗口:我的输出谁能指出什么地方不对吗?为什么它会创建重复元素?
查看merge_sort
函数中的代码:
for (i = 0; i < arr1.size() && j < arr2.size(); k++) {
if (arr1.at(i) <= arr2.at(j)) {
arr.push_back(arr1.at(i));
i++;
}
else if (arr1.at(i) > arr2.at(j)) {
arr.push_back(arr1.at(j));
// ^^^^
// It should be arr.push_back(arr2.at(j));
j++;
}
k++;
}
将arr.push_back(arr1.at(j));
替换为arr.push_back(arr2.at(j));
,您的代码将像魅力一样工作。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- 为什么stream::忽略未按预期工作