我的合并排序没有给出正确的排序数组,任何人都可以解释一下吗?
my merge sort is not giving proper sorted array, can anyone explain?
我正在努力理解和实现这个算法几个小时,我很确定,我正在按照标准算法做所有事情,但它仍然不起作用。 我正在关注一本名为"Thomas H cormen的算法导论"的书。
#include<iostream>
using namespace std;
//function to divide the array until it has only one element
void merge_sort(int[], int, int);
// function to merge two sorted arrays
void merge(int[], int, int, int);
// global array - to write the final sorted array in this
int na[100];
void main() {
int a[50]; //input array
cout << "Enter an unsorted array of 10 elements" << endl;
for (int i = 0; i < 10; i++) {
cin >> a[i];
}
merge_sort(a, 0, 9); // calling merge_sort
for (int i = 0; i < 10; i++) {
//print final array
cout << na[i] << endl;
}
}
void merge_sort(int a[], int p, int r) {
// p is 0 , r is final bound
if (p < r) {
int q;
q = (p + r) / 2; //finding middle element
merge_sort(a, p, q);
merge_sort(a, q + 1, r);
merge(a, p, q, r);
}
}
// for two sorted sub-array from p to q and from q+1 to r, this function
// will compare first element of each sub-array and will place the smaller
// one in final array until every element is sub-array is in final sorted
//array
void merge(int a[], int p, int q, int r) {
int n1 = q - p + 1;
int n2 = r - q;
int l[50];
int ri[50];
for (int i = 0; i < n1; i++) {
l[i] = a[p + i ];
}
l[n1] = 99999;
for (int j = 0; j < n1; j++) {
ri[j] = a[q + j + 1];
}
ri[n2] = 99999;
int i = 0;
int j = 0;
for (int k = p; k <= r; k++) {
if (l[i] <= ri[j]) {
na[k] = l[i];
i = i + 1;
}
else {
na[k] = ri[j];
j = j + 1;
}
}
}
您使用a
中的值进行合并,但您将排序的子数组放在na
中。如果子数组已排序,则merge
操作只会为您提供已排序的数组。正如 BLUEPIXY 所建议的那样,您需要使用一个容器来存储排序的子数组和合并排序的子数组:无论您为此目的使用a
还是na
并不重要,但a
会是更好的选择,因为您已经拥有它。
-
尝试阅读在 StackOverflow 上提问的指南。
-
在 mergeSort 中,您正在合并未排序的数组而不是排序的数组(
void merge_sort(int a[], int p, int r)
:由于您要合并a[]
,您应该对a[]
而不是na[]
进行排序)。
否则,合并na[]
段并将其复制到a[]
的每个函数调用中对 merge_sort(:);
相关文章:
- 二叉排序树无法编译
- 请解释"函数1(p1,p2,p3);"的输出
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 解释一下这个排序算法是如何工作的?
- 解释标准库排序函数C++的比较谓词的工作原理?
- 我的合并排序没有给出正确的排序数组,任何人都可以解释一下吗?
- 结构解释的C 排序向量
- 请解释此计数排序中的代码
- 在c中快速排序代码,在64位Windows机器上无法解释的行为
- 解释冒泡排序和选择排序的部分
- 我可以将键值对的内存映射文件重新解释为映射以便对它们进行排序吗?
- 计数排序中的循环解释
- 选择排序解释