Нет ошибок, просто не сортировать список. Он работал, когда я напрямую использовал индексы вместо указателей. Я чувствую, что мне не хватает чего-то о том, как должен вести себя указатель .... Правильно ли я полагаю, что указатели передаются по значению (скопированному) в рекурсивные вызовы или я их испортил?Что случилось с моей (с указателем) слиянием?
#include<iostream>
using namespace std;
void merge(int *start, int *pivot, int *end) {
const int n = start - end;
int ret[n];
int i;
for (i=0; i<n; ++i) {
if (*start < *pivot) {
ret[i] = *(start++);
}
else {
ret[i] = *(pivot++);
}
}
for (i=0;i<n;++i) {
start[i] = ret[i];
}
}
void sort1(int* start,int* end) {
int n = end - start;
if (n <= 1) {
return;
}
int* pivot = &start[n/2];
sort1(start,pivot);
sort1(pivot,end);
merge(start,pivot,end);
}
int main() {
int x[] = {1,3,6,2,4,5};
sort1(x,x+6);
int i;
for (i=0; i<6; ++i) {
cout << x[i] << endl;
}
}
Мой выходной ток 1 1 3 3 1 1
Я не вижу очевидной проблемы с тем, что ваш код просто читает его. Можете ли вы опубликовать текущий результат, который вы получаете? Выход –
просто '1 \ п 3 \ П 6 \ п 2 \ п 4 \ п 5 \ n' – user1273230
, так как вычисление фиксации для' n', теперь '1 1 3 3 1 1 ' – user1273230