2014-12-06 75 views
-1

我试图将我的C++代码转换为Pascal,我确信我的代码正在工作。转换后,一切进展顺利,除了结果与我的C++代码不一样 - 它不像C++中那样排序。 这是我的Pascal:我的快速排序程序似乎没有做任何事情

program try_quicksorting; 

uses crt; 

    var 
num: array[1..20] of integer; 
x, y, a: integer; 
again: char; 


procedure quickSort(arr: array of integer; left, right:integer); 

var 
    i:integer; {pointer for my left side} 
    j:integer; {pointer for my right side} 
    tmp:integer; 
    pivot:integer; 
begin 

i:=left; 
j:=right; 

    pivot := arr[(left + right) div 2]; 

     while (i <= j) do 
     begin 
     while (arr[i] < pivot) and (arr[j] < pivot) do 
     i:=i+1; 
    while (arr[j] > pivot) and (arr[i] > pivot) do 
     j:=j-1; 

    if(i <= j) then 
    begin 

      tmp:=arr[i]; 
        arr[i]:=arr[j]; 
        arr[j]:=tmp; 
        i:=i+1; 
        j:=j-1; 

    end; 

     end; 

if j > left then 
    quickSort(arr, left, j); 
if i < right then 
    quickSort(arr, i, right); 


end; 
begin 

    clrscr; 
x:=1; 
repeat 
    clrscr; 


    writeln('******************************************************'); 
    write('Records: '); 

    a:=1; 
    while(a<x) do 
      begin 
    write(num[a], ' '); 
    a:=a+1; 
    end; 

    writeln(''); 
    writeln('******************************************************'); 
    write('Enter a number: '); 
     readln(num[x]); 
    writeln('------------------------------------------------------'); 


repeat 
    write('Again[Y/N]: '); 
       read(again); 

      if(again = 'y') or (again = 'Y') or (again = 'n') or (again = 'N')then 
     x:=x+1 
      else 
       writeln('Invalid input! Please press Y for Yes and N for No.'); 

until (again = 'y') or (again = 'Y') or (again = 'n') or (again = 'N'); 

until (again = 'n') or (again = 'N'); 
readln; 


quickSort(num,1,x); 

write('Sorted Form: '); 
y:=1; 
while (y<x) do 
    begin 
     write(num[y], ' '); 
     y:=y+1; 
    end; 
    readln; 
end. 

就是这样。我希望你立即样的反应:)

+0

使用“不”或“不”而不是“不”;使用“我是”或“我是”而不是“im”;使用“立即”而不是“immidiate”。 – 2014-12-06 14:04:31

+0

对不起,你是语法纳粹吗?无论如何,你有关于我的问题的答案吗? o.O – user3187367 2014-12-06 14:23:33

回答

0

在运行的设施,工厂帕斯卡,数组是值类型,所以在这个

procedure quickSort(arr: array of integer; left, right:integer); 

你传递数组的一个副本。

更改这个

procedure quickSort(var arr: array of integer; left, right:integer); 

,它应该更好地工作。

相关问题