如何正确分配数组中的整数?

问题描述 投票:0回答:1

我目前正在尝试制作一个二进制插入程序,它读取一个随机数并将其插入到排序列表中,但每次我执行该程序时,它只返回一个充满 0 的列表,在创建普通插入程序时我也遇到了这个问题。即使在排序之前,列表也充满了 0(也就是由于某种原因没有分配任何元素)

这是代码:

program BinaryInsert;

function binaryfind(head, tail : integer; e : integer; vector: array of integer) : integer;  //uses binary search to find the right placement for e (element) inside the vector
var
    mid : integer;
begin
    mid := (head + tail) div 2;  //keep in mind that div returns the value rounded down
    if head <> tail then
    begin
       if vector[mid] >= e then  //>= garantees that this sorting method is stable
         binaryfind(mid+1, tail, e, vector)
       else
         binaryfind(head, mid, e, vector);
    end
    else
    begin
       if e >= vector[mid] then
         binaryfind := mid + 1  //it should take the place in front of mid (again >= garantees stability)
       else
         binaryfind := mid;  //it should take the place before mid
    end;
end;

procedure swap(e1, e2: integer);
var
    aux : integer;
begin
    aux := e1;
    e1 := e2;
    e2 := aux;
end;

procedure binaryinsert(e : integer; vector : array of integer);  //actual sorting happens here
var
    i, placement, l : integer;
begin
    l := Length(vector);
    placement := binaryfind(0, l-1, e, vector);
    vector[l] := e;
    for i := (l-1) downto (placement + 1) do
       swap(vector[i], vector[i-1]);  //reorganizes the array until the new element is at the correct placement
end;

procedure randomsorted(vector : array of integer);  //creates a sorted array with n random numbers
var
  i : integer;
begin
    for i := 0 to Length(vector)-1 do
       binaryinsert(random(9999), vector);
end;

var
  vector : array of integer ;
  e : integer;
begin
  SetLength(vector, 5);
  randomsorted(vector);
  for e in vector do
    writeln(e);
  readln(e);
end.

我试图获取排序的随机整数列表

arrays sorting integer variable-assignment pascal
1个回答
2
投票

一些观察结果:在没有先前调用

random(9999);
的情况下调用
Randomize()
始终返回 0 作为我测试中的第一个值。对于真正的(半)随机系列,您应该在程序开始时调用
Randomize()

但是,在开发过程中,提供选定的常量值可能很有用,只是为了验证排序是否按预期工作。

注意

Value
Variable
参数的区别。您在两个位置传递
vector
作为值参数,但您想保留对数组所做的更改,因此,您应该将
vector
作为变量参数传递。

最后看来

binaryinsert()
binaryfind()
需要一些关注。您正在为超出数组末尾的
vector[l]
分配新值。可能还有其他问题。

© www.soinside.com 2019 - 2024. All rights reserved.