Сортировка массива — где ошибка?

Есть строковый массив массивов. Двумерный. Кол-во элементов 37.
Количество записей - любое. B_records_count = кол во записей.
Задача - отсортировать массив по возрастанию по 37 элементу.

Использую метод пузырька.

{
Комментарии
Массив и его данные - пример.
B_TABLE:array of array [1..37] of string;
Массив начинается с первой строки и первого элемента. 
Нулевых нет - там пусто и мы не работаем с ними.
B_TABLE[1,1]:='текст';
B_TABLE[1,2]:='текст2';
...
B_TABLE[1,36]:='текст36';
B_TABLE[1,37]:='2'; //Это число в виде текста по которому сортируем

B_TABLE[2,1]:='текст';
B_TABLE[2,1]:='текст2';
...
B_TABLE[2,36]:='текст36';
B_TABLE[2,37]:='1'; //Это число в виде текста по которому сортируем
и так далее
При сортировке запись 2 и все её элементы должны стать записью 1.
А запись 1 - записью 2. Проще говоря поменяться местами.
}

//Сортировка
//Начиная с первой "строки" массива (нулевой у нас нет - пустой, данные идут с 1 строки)
for i:=1 to B_records_count do
begin
for j:=1 to B_records_count-1 do
begin
//Меняем представление данных из строки в число
if strtoint(B_TABLE[j,37])>strtoint(B_TABLE[j+1,37]) then
begin
//Для всех элементов производим замену. Их у нас 37. С первого по 37 т.к. нулевого нет - пустой.
for k:=1 to 37 do
begin
sort_string:=B_TABLE[j,k]; //Поместили значение элемента в переменную для сортировки
B_TABLE[j,k]:=B_TABLE[j+1,k]; //Поменяли значения элементов
B_TABLE[j+1,k]:=sort_string;
end;
end;
end;
end;


Проблема - алгоритм работает с ошибкой. Сортировка не происходит и пропадает последний элемент.
Где ошибка?
  • Вопрос задан
  • 186 просмотров
Пригласить эксперта
Ответы на вопрос 1
@kalapanga
Проверить сейчас не на чем, но попробуйте циклы записать так:
for i:=1 to B_records_count - 1 do
for j:=1 to B_records_count - i do
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы