2015-01-01 1 views
0

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; 
     } 
+1

이이 트릭을했던 것처럼이 보이는 – SimpleVar

답변

1
decimal centerDcl = left + Convert.ToInt32(right)/2; 

이 잘 보이지 않는다.

이 있어야한다 :

decimal centerDcl = (left + Convert.ToInt32(right))/2; 
+0

디버깅을 시도했습니다. 해결할 다른 몇 가지 꼬임이 있습니다. 내가 확인할 때 나는 대답으로 표시 할 것이다. – Hoppe

관련 문제