정수 배열에서 역전을 계산하는 프로젝트를 만들기 위해 학교에서 숙제를했습니다. 나는 처음에 그것을 시도했지만, 예상했던대로, 나는 제한 시간을 지키지 않았다. 사전에파스칼 - 향상된 병합 정렬 반전 횟수 잘못 출력
procedure mergeSort(var arr, pomarr : array of longint; start, stop :
longint; var inv : longint);
var
mid,i,j,k : longint;
begin
mid := (start + stop) div 2;
if (start < mid) then mergeSort(arr,pomarr,start,mid,inv);
if (mid+1 < stop) then mergeSort(arr,pomarr,mid+1,stop,inv);
i := start;
k := start;
while (i<= mid) and (j <= stop) do begin
if (arr[i] < arr[j]) then begin
pomarr[k] := arr[i];
i += 1;
end
else begin
pomarr[k] := arr[j];
inv += mid - i;
j += 1;
end;
k += 1;
end;
while (i <= mid) do begin
pomarr[k] := arr[i];
i += 1;
k += 1;
end;
while (j <= stop) do begin
pomarr[k] := arr[j];
j += 1;
k += 1;
end;
for k := start to stop do begin
arr[k] := pomarr[k];
end;
end;
감사 : 그래서 일부 인터넷 검색과 완전히 머지 소트를 이해하려고 노력하고 어떻게에 반전의 계산을 구현하는 후에, 나는 올바르게 배열을 정렬하는 동안, 불행히도 잘못된 수를 출력하는 코드를 만들 었 너의 모든 도움을. 선언에서 어리석은 실수라고 생각합니다. 그러나 나는 그것을 찾지 못하는 것 같습니다.
정확하게 당신의 질문은 무엇입니까? SO는 온라인 디버깅 서비스가 아닙니다. – MartynA
SO 도움말에 따르면 숙제 및 디버깅 질문은 제한이 없습니다. 나는이 사이트가 나의 부주의를 고치는 것을 의미하지 않는다는 것을 깨닫는다. 그러나 나는 내가 생각할 수 있었던 누구나를 했어도, 지금 나는이 시점에서 붙이게된다. 더 이상 코드를 제거 할 수 없으며 정렬 자체가 작동하므로 머리를 감쌀 수없는 문제가 있습니다. 제 질문은 내 코드 문제입니다. –
파스칼 컴파일러에 디버거가 없습니까? 디버깅은 이와 같은 연습을 통해 배워야 할 중요한 요소입니다. – MartynA