【问题标题】:I don't understand why my output changed, please help me我不明白为什么我的输出改变了,请帮助我
【发布时间】:2021-09-04 07:10:56
【问题描述】:

我正在使用 Free Pascal 构建一个函数来对整数数组进行排序,称为 QuickSort,它使用快速排序算法。 这是我的程序:

uses crt;
var
        i,n : integer;
        A : array[1..100] of integer;

procedure QuickSort(var arr : array of integer; l,r : integer);
var
        i,j,y,x : integer;

begin
        i := l; j := r;
        x := arr[(l+r) div 2];
        repeat
                while arr[i] < x do inc(i);
                while x < arr[j] do dec(j);
                if i <= j then
                begin
                        y := arr[i]; arr[i] := arr[j]; arr[j] := y;
                        inc(i); dec(j);
                end;
        until i > j;
        if l < j then QuickSort(arr,l,j);
        if i < r then QuickSort(arr,i,r);
end;

BEGIN
        readln(n);
        for i := 1 to n do
        begin
                write('A[',i,'] = ');
                readln(A[i]);
        end;
        QuickSort(A,1,n);
        for i := 1 to n do write(A[i]:7);
        readln;
END.

无论我的输入是什么,它都不起作用。但是当我改变这个

var
        i,n : integer;
        A : array[1..100] of integer;

procedure QuickSort(var arr : array of integer; l,r : integer);

进入这个

type
        Array_ = array[1..100] of integer;
var
        i,n : integer;
        A : Array_;

procedure QuickSort(var arr : Array_; l,r : integer);

完美运行。有人可以向我解释吗?谢谢你:))

【问题讨论】:

  • 我想知道亲密选民缺少哪些“附加细节”?

标签: arrays quicksort freepascal


【解决方案1】:

当你将函数声明为

procedure QuickSort(var arr : array of integer; l,r : integer);

您将数组声明为“开放数组参数”并且适用一些特殊规则。 “开放数组参数”允许将不同大小的数组传递给函数。但是,要使其正常工作,必须遵循一些规则,而您没有遵循以下规则:

在例程的主体中,索引从 0 开始(不管传入的数组是如何定义的)。可以使用Low和High来学习索引范围,也可以表示为0..Length-1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-28
    • 2022-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    相关资源
    最近更新 更多