simple merge sort algorithm found here을 학술 활동에 C#으로 이식하려고합니다. 나는 이 코드를 따랐다는 것을로 믿고 있지만 재귀 조건은 잘못되었습니다.배열을 통해 단순 병합 정렬이 올바르게 반복되지 않습니다.
나는 나무의 왼쪽 아래를 정확하게 되풀이하고 있다고 믿는다. 그러나 나는 후반부에 도착할 때 무한 루프에 빠진다. 배열 처리를 계속하려면 재귀를 어떻게 얻습니까? 내가 하반기에 도착하면
, 출력은 다음과 같습니다
11, 1, 5
11, 1, 3
11, 1, 2
11, 1, 1
11, 4, 6
11, 4, 6
11, 4, 6
11, 4, 6
코드는 다음과 같습니다
var input = new[] {5, 10, 1, 7, 9, 15, 8, 11, 20, 2};
var result = MergeSort.Sort(input);
using System;
using System.Diagnostics;
namespace MergeSort {
internal class MergeSort
{
public static int[] Sort(int[] input, int left = 0, int? rightNullable = null)
{
var right = (rightNullable == null)
? input.Length - 1
: Convert.ToInt32(rightNullable);
if (left >= right) { return input; }
decimal centerDcl = left + Convert.ToInt32(right)/2;
var center = Convert.ToInt32(centerDcl);
Console.WriteLine("{0}, {1}, {2}", input.Length + 1, left + 1, center + 1);
Debug.WriteLine("{0}, {1}, {2}", input.Length + 1, left + 1, center + 1);
Sort(input, left, center);
Sort(input, center + 1, rightNullable);
input = Merge(input, left, center + 1, right);
return input;
}
이이 트릭을했던 것처럼이 보이는 – SimpleVar