Кто-нибудь, пожалуйста, найдите ошибку в моем подходе и коде.
Поэтому я пытался реализовать сортировку слиянием и пытался сделать это очень рудиментарным и грубым методом. Насколько я вижу , я, кажется, не нахожу проблемы с моей логикой гайки выходной экран после принятия входного значения массива просто падает.
Я был бы очень признателен, если бы кто-то мог предложить лучший способ или найти ошибку в моем подходе.
Что я уже пробовал:
#include<iostream int *merge(int *p,int n); int *halfa(int *ptr,int n); int *halfb(int *ptr,int n); int main() { int *a,arr[8]; cout<<"enter"; for(int i=0;i<8;i++) { cin>>arr[i]; } a=merge(arr,8); cout<<"\n"; for(int i=0;i<8;i++,a++) { cout<<*a;} return 0; } int *merge(int *p,int n) { int *q,*r,*t; q=halfa(p,16); r=halfb(p,16); for(int i=0;i<16;i++,t++) { if(*q<*r) {*t=*q; q++;} if(*r<*q) {*t=*r; r++;} } return(t); } int *halfa(int *ptr,int n) { int *q,*y; for(int i=0;i<(n/2);i++,q++,ptr++) { q=ptr; } y=merge(q,(n/2)); return(y); } int *halfb(int *ptr,int n) { int *q,*y; for(int i=0;i<n;i++,q++,ptr++) { if(i>=(n/2)) { q=ptr; break; } } y=merge(q,(n/2)); return(y); }
Peter_in_2780
-... предложи лучший способ.." Это называется отладчик. Пройдитесь по своему коду, понаблюдайте за переменными и потоком управления.
Rick York
В вашем коде есть несколько буквальных значений, разбросанных по нему, и это действительно плохая идея. Я имею в виду 8-е и 16-е там. Что произойдет, если вы решите иметь 9 или 10 значений? У вас есть целая куча мест, чтобы изменить его, а затем надеяться, что вы получили их все. Для этого лучше использовать постоянное значение, например :
const int InputCount = 8; и замените все экземпляры 8 на InputCount. Затем, если вы решите иметь другое количество входов позже, у вас будет только одна вещь, которую нужно изменить. Если 16s зависят от другого значения, равного 8, то они должны быть изменены на 2*InputCount. Опять же - только одна вещь, чтобы изменить, если вы должны. Может показаться, что это не так сейчас, но это может оказаться очень важным в будущем.
Member 13596568
Спасибо за Ваш вклад.
На самом деле я пытался заставить его работать по крайней мере с 16, а затем использовать значение const.
Но никаких проблем нет, в приведенном выше коде есть много ошибок, которые я обнаружил после его повторного просмотра.
Еще раз большое спасибо