Я написал программу сортировки слиянием, но я получил неправильные результаты.Объединить сортировку в C, давая неправильные результаты
Я видел другие программы, подобные этому, но они не помогают мне решить мою проблему. Я думаю, проблема в функции merge
.
#include <stdio.h>
#include "stdafx.h"
#define Size 5
//this is the array
int arr[Size] = { 5, 4, 3, 2, 1 };
int sr[10];
void mergesort(int a[], int start, int end, int size);
void merge(int a[], int start, int end, int size);
int main(void) {
mergesort(arr, 0, 4, 5);
for (int i = 0; i < Size; i++) {
printf_s("%i", sr[i]);
}
printf_s("\n");
return 0;
}
void mergesort(int a[], int start, int end, int size) {
if (size < 2)
return;
int s = size/2;
mergesort(a, start, (start + end)/2, s);
mergesort(a, (start + end)/2, end, s);
merge(a, start, end, s);
}
void merge(int a[], int start, int end, int size) {
int left = start;
int right = ((start + end)/2) + 1;
for (int i = 0; i < size; i++) {
if (left < (start + end)/2) {
if (right >= end) {
sr[i] = arr[left];
left++;
} else
if (arr[left] < arr[right]) {
sr[i] = arr[left];
left++;
} else {
sr[i] = arr[right];
right++;
}
} else {
sr[i] = arr[right];
right++;
}
}
}
Отладчик вам друг. Используй это. –
Пожалуйста, отформатируйте свой код, чтобы он был читабельным ... И каков ваш результат? –
извините, но это мой первый вопрос. По тому, как ответ был странным, как 5 3 1 0 0. –