Fil*_*lik 1 arrays delphi sorting pascal bubble-sort
我在文本文件中有这10个数字(每行一个),我需要按照从最高编号开始的时间顺序对它们进行排序.我编写的代码工作得很好,但问题是代码不灵活,因为一旦我向文本文件中添加另一个数字,它将无法工作,因为代码设置为仅排序10个数字...这是由于我的整数数组应该在排序过程开始之前读取值,但是不允许我向数组的属性添加变量,因此它将能够读取和排序任意大小的文本文件.我知道必须有一种方法来制作一个可以对这种结构的任何大小的文件进行排序的程序,请告诉我如何改进我的代码.(如果你认为我的方式效率不高,那是因为这是我从高中毕业的作业,我需要使用这些数组实现一个bubbleort).
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
numbers, sortednumbers : TextFile;
count : integer=0;
number : array[1..10] of integer;
I : integer;
Procedure Swap(var X, Y : Integer);
var
Temp : integer;
begin
Temp := X;
X := Y;
Y := Temp;
end;
procedure Assign;
var I : Integer;
begin
reset(numbers);
for I := 1 to count do ReadLn(numbers, number[I]);
end;
procedure BubbleSort;
var I, J : integer;
begin
for I := 2 to count do
begin
for J := count downto I do
if (number[J] > number[J - 1]) then
Swap(number[J - 1], number[J]);
end;
end;
begin
AssignFile(numbers, 'Numbers.txt');
AssignFile(sortednumbers, 'Sorted-Numbers.txt');
Reset(numbers);
While not EoF(numbers) do
begin
ReadLn(numbers);
Inc(count);
end;
Reset(numbers);
ReWrite(sortednumbers);
Assign;
BubbleSort;
For I := 1 to count do writeln(sortednumbers, number[I]);
CloseFile(numbers);
CloseFile(sortednumbers);
end.
Run Code Online (Sandbox Code Playgroud)
使用动态数组.这是一个可以更改它所包含的元素数量的数组.
而不是声明:
number : array[1..10] of integer;
Run Code Online (Sandbox Code Playgroud)
而是跳过边界声明:
Number : array of integer;
Run Code Online (Sandbox Code Playgroud)
然后,在开始使用它之前,设置它的长度:
SetLength(Number, 10);
Run Code Online (Sandbox Code Playgroud)
完成后,通过将其设置为长度为0来释放内存:
SetLength(Number, 0);
Run Code Online (Sandbox Code Playgroud)
注意:
Number[0]是第一个元素,Number[9]是第十个元素.这在编程中很常见,但如果它不是你以前遇到的东西,可能会让人感到困惑.TFileStream)而不是您当前正在执行的旧式文件IO.另外,考虑一下你的变量名 - Number对于一个数组是奇数 - 为什么不添加S并调用它Numbers,例如?这可能是一点一点,所以慢慢地,小步骤,经常保存和备份(最好是源代码控制),玩得开心!
| 归档时间: |
|
| 查看次数: |
592 次 |
| 最近记录: |