Я пытаюсь упорядочить слияние сортировки по рекурсии. Однако я не получаю вывод в надлежащем порядке сортировки. Пожалуйста, исправьте мой код и расскажите мне о моей ошибке. Программа принимает количество элементов и элементов от пользователя. На основе данных программа shoud предоставляет элементы в отсортированном порядке. Код выглядит следующим образом.Проблема с выдачей слияния сортировки
#include <iostream>
#include <cstdio>
#define max 20
using namespace std;
int data[max];
int nw[max];
void mergeparts(int, int, int);
void merge_sort(int low, int high){
int mid;
if(low<high){
mid=(low+high)/2;
merge_sort(low, mid);
merge_sort(mid+1, high);
mergeparts(low, mid, high);
}
}
void mergeparts(int low, int mid, int high){
for(int i=low; i<high; i++){
nw[i] = data[i];
}
int i = low;
int j = mid+1;
int k = low;
while((i <= mid)&&(j <= high)){
if(nw[i]<=nw[j]){
data[k]=nw[i];
i++;
}
else{
data[k]=nw[j];
j++;
}
k++;
}
while(i <= mid){
data[k] = nw[i];
k++;
i++;
}
while(j <= high){
data[k] = nw[j];
k++;
j++;
}
for(int i=low; i<high; i++){
data[i] = nw[i];
}
}
int main(){
int n;
cout<<"Enter the number of elements"<<endl;
cin>>n;
cout<<"Enter the "<<n<<" numbers."<<endl;
for(int i=0; i<n; i++){
cin>>data[i];
}
cout<<"The unsorted list is: "<<endl;
for(int i=0; i<n; i++){
printf("%d\t",data[i]);
}
cout<<endl;
merge_sort(0,n+1);
cout<<"The sorted list is: "<<endl;
for(int i=0; i<n; i++){
printf("%d\t",data[i]);
}
return 0;
}
Множество опрокидывающих бомбардиров сегодня утром, не принимайте это лично. Но это довольно много кода для чтения, без описания того, что он делает, без комментариев. Кроме того, вы должны, по крайней мере, иметь пример ввода/вывода с ожидаемым результатом. – BoBTFish
Вам следует попробовать немного сложнее (я усвоил здесь трудный путь). Взгляните на это: http://geeksquiz.com/merge-sort/. Это решение C, но оно также будет работать на C++. Кроме того, зачем смешивать printf и cout? – Transcendental
@Transcendental: мой код в точности похож на ссылку, о которой вы упоминали, только то, что входные данные являются статичными, и я хочу, чтобы она была динамичной. Я хотел проверить, работает ли printf и cout одновременно в программе cpp или нет – Android7