所以,我已经遇到了一些问题,但我认为自己已经取得了重大进展。尝试过很多东西。但是我无法得到这个输出正确的值我概念上理解合并排序,但编码它让我感到困惑。所以...如果我输入:
5 1 7 4 6 9
而不是:14569,我得到了(我无法弄清楚原因): 11414761467 **另外,作为一个问题,是否有一种简单的方法可以循环使用一组数字,以便在这种情况下不需要换行?
#include <iostream>
using namespace std;
void merge(int[], int, int, int);
void mergesort(int array[], int low, int high)
{
int mid;
if(low < high){
mid = low + (high-low)/2;
mergesort(array, low, mid);
mergesort(array, mid+1, high);
merge(array, low, mid, high);
}
}
void merge(int array[], int low, int mid, int high)
{
int h, i, j, b[high], k;
h = low;
i = low;
j = mid + 1;
while((h <= mid) && (j <= high)){
if(array[h] <= array[j]){
b[i] = array[h];
h++;
}
else{
b[i] = array[j];
j++;
}
i++;
}
if( h > mid){
for(k = j; k <= high; k++){
b[i] = array[k];
i++;
}
}
else{
for(k = h; k <= mid; k++){
b[i] = array[k];
i++;
}
}
for( k = low; k <= high; k++){
array[k] = b[k];
}
for(int i = 0; i < high; i++){
cout << array[i];
}
}
int main()
{
int size;
cin >> size;
int data[size];
for(int i = 0; i < size; i++){
cin >> data[i] ;
}
mergesort(data, 0, size-1);
}
还有一种方法来cin&gt;&gt; data [i]不必在每一个之后按Enter键,但不使用向量?非常感谢。
答案 0 :(得分:2)
你在merge()的每次递归中打印,这就是为什么你这样做的原因,因为打印发生在合并发生时,并且不打印最终结果。
for(int i = 0; i < high; i++){
cout << array[i];
}
要避免这种情况,请在main中打印合并的数组。
我的意思是将您的计划更改为:
#include <iostream>
using namespace std;
void merge(int[], int, int, int);
void mergesort(int array[], int low, int high)
{
int mid;
if(low < high){
mid = (high+low)/2;
mergesort(array, low, mid);
mergesort(array, mid+1, high);
merge(array, low, mid, high);
}
}
void merge(int array[], int low, int mid, int high)
{
int h, i, j, b[high], k;
h = low;
i = low;
j = mid + 1;
while((h <= mid) && (j <= high)){
if(array[h] <= array[j]){
b[i] = array[h];
h++;
}
else{
b[i] = array[j];
j++;
}
i++;
}
if( h > mid){
for(k = j; k <= high; k++){
b[i] = array[k];
i++;
}
}
else{
for(k = h; k <= mid; k++){
b[i] = array[k];
i++;
}
}
for( k = low; k <= high; k++){
array[k] = b[k];
}
}
int main()
{
int size;
cin >> size;
int data[size];
for(int i = 0; i < size; i++){
cin >> data[i] ;
}
mergesort(data, 0, size-1);
for(int i = 0; i < size; i++){
cout << data[i];
}
}