이 코드에서 실제로 무엇이 잘못된지 묻고 싶습니다. 그래서 나는이 페이지에보고 혼자 퀵 (2 웨이)을 이해하려고 노력 : 나 자신에 의해 그것을 코드하려고 그 이후 http://me.dt.in.th/page/Quicksort/#disqus_thread 여기 도착 :Quicksort 알고리즘 (C#)
public void Sort(Comparison<TList> del, long l, long r)
{
// inspired by: http://me.dt.in.th/page/Quicksort/
if (l >= r) return;
// partitioning
for(long i = l + 1; i <= r; i++)
{
if (del.Invoke(this[i], this[l]) < 0)
{
Swap(i, l);
}
}
// recursion
Sort(del, l, l - 1);
Sort(del, l + 1, r);
}
그런 다음 제가 언급 한 웹 사이트에 댓글로 보았다
static void Main(string[] args)
{
MyList<int> obj;
do
{
obj = MyList.Random(100, 0, 100);
obj.Sort(stdc);
obj.Sort(stdc);
} while (obj.IsSorted(stdc));
Log("Not sorted", obj);
Console.ReadKey(true);
}
: (이 방법에 의해 링크 된 목록에 포함)이 함께 테스트
void qsort(char *v[], int left, int right)
{
int i, last;
void swap(char *v[], int i, int j);
if (left >= right)
return;
swap(v, left, (left + right)/2);
last = left;
for (i = left + 1; i <= right; i++)
if (strcmp(v[i], v[left]) < 0)
swap(v, ++last, i);
swap(v, left, last);
qsort(v, left, last - 1);
qsort(v, last + 1, right);
}
지금은 내 코드는 여전히 작동하는 이유 정말 궁금 :이 발견 이 :
public bool IsSorted(Comparison<TList> del)
{
var el = start;
if (el != null)
{
while (el.Next != null)
{
if (del.Invoke(el.Value, el.Next.Value) > 0) // eq. to this[i] > this[i + 1]
return false;
el = el.Next;
}
}
return true;
}
을이 :
public static MyList<int> Random(int num, int min = 0, int max = 1)
{
var res = new MyList<int>();
var rand = new Random();
while (num > 0)
{
res.Add(rand.Next(min, max));
num--;
}
return res;
}
당신이로 실행중인 문제 : 또한 대체 호어 파티션 방식을 포함하는 위키 기사를보세요? 한 무리의 코드를 덤프하고 "이 문제가 무엇이겠습니까?"라고 물어보십시오. – itsme86