这是一个程序,它的任务是按字母顺序对字符串进行排序,但它不会对它们进行排序。请帮我找出问题所在。
const
pi = 5;
type
ar = array[1..5]of string;
function bool(s001, s002: string): boolean;
begin
result := s001 < s002;
end;
var
i: integer;
s, s1: string;
a: ar;
c1, c2: integer;
procedure bubble(var a: ar);
var
i, i2: integer;
s, s2: string;
c1, c2: char;
begin
for i := 1 to pi - 1 do
for i2 := 1 to pi - i2 do
begin
if bool(a[i], a[i + 1]) then
begin
s2 := a[i2];
a[i2] := a[i2 + 1];
a[i2 + 1] := s2;
end
end;
end;
begin
for i := 1 to pi do
begin
writeln('Введите ', i, ' элемент массива:');
readln(s);
a[i] := s;
end;
for i := 1 to pi do
begin
writeln(a[i]);
end;
bubble(a);
writeln('_________________');
for i := 1 to pi do
begin
writeln(a[i]);
end;
end.
您要么对冒泡方法有误解,要么有错字。 第一的:
一个非常奇怪的设计。您需要像这样执行第二个循环:
第二:
您正在比较字符串数组的错误成员,您需要:
也就是说,正确的循环应该是这样的:
然后一切正常。但请记住,在您的情况下排序是按降序排列的,因为该函数
bool
返回 true 表示降序。PS 如果使用 pi 常量作为数组的大小,那么数组本身应该通过它来声明: