Помощь - Поиск - Пользователи - Календарь
Полная версия: Сортировка массивов с помощью динамической памяти
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
User4225
Помогите!!!!!
Используя датчик случайнх чисел, поместить в динамическую память массив действительных чисел без повторений колличеством 50000 элементов. Упорядочить эти элементы по возрастанию методами Шелла, Хоора, выбора и пузырька, а потом ещё вывести общее время, потраченное каждым методом на сортировку.
volvo
Не все так просто... Одним куском данные в "куче" не поместятся (нельзя запросить у ОС больше 64К за один раз, а тебе нужно 50000*6=300000байт, т.е. больше 292К)... А если разбить массив на несколько кусков, то как именно их потом сортировать (тут понадобится и слияние отсортированных кусков)... unsure.gif

Нужно пользоваться именно Турбо-Паскалем?
User4225
Да, нужен именно Паскаль. Программу для сортировки действительных масивов размером [1..255] уже написал, а что делать дальше - не знаю.
User4225
И ещё: мне сказали, что у ОП можно запросить за раз от 640К до 1М. Это возможно, если использвать Паскаль?
volvo
Хотя, в принципе, можно все сделать достаточно просто... Смотри, принцип такой:
{ Описываешь ОченьДлинный Массив }
type
  PTOnePart = ^TOnePart;
  TOnePart = Array[1 .. 10000] Of Real;

  TVeryLongArray = Array[1 .. 5] Of PTOnePart;

{ Это для размещения большего массива в "куче" }
Procedure CreateArray(var arr: TVeryLongArray);
var i: integer;
Begin
  For i := 1 To 5 Do
    GetMem(arr[i], 10000 * SizeOf(Real));
End;
{ Удаление массива из "кучи" }
Procedure DeleteArray(var arr: TVeryLongArray);
var i: integer;
Begin
  For i := 1 To 5 Do
    FreeMem(arr[i], 10000 * SizeOf(Real));
End;

{ Для "чтения" элемента из массива: }
Function GetElement(var arr: TVeryLongArray;
         _index: LongInt): Real;
Begin
  GetElement := arr[(_index div 10000) + 1]^[(_index mod 10000) + 1];
End;

{ Для "записи" элемента в массив: }
Procedure SetElement(var arr: TVeryLongArray;
          _index: LongInt; _value: Real);
Begin
  arr[(_index div 10000) + 1]^[(_index mod 10000) + 1] := _value;
End;

var
  great_array: TVeryLongArray;

begin
  ...
end.

И теперь работаешь с Great_Array как с обычным массивом, только
{ вместо такого }
great_array[1] := 10.5;
{ делаешь так ... }
SetElement(great_array, 1, 10.5);

{ ... и вместо }
x := great_array[1];
{ вот так: }
x := GetElement(great_array, 1);


Внеси эти изменения в свою программу, и все будет прекрасно работать...
:yes:
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.