Помогите!!!!! Используя датчик случайнх чисел, поместить в динамическую память массив действительных чисел без повторений колличеством 50000 элементов. Упорядочить эти элементы по возрастанию методами Шелла, Хоора, выбора и пузырька, а потом ещё вывести общее время, потраченное каждым методом на сортировку.
volvo
4.10.2005 22:52
Не все так просто... Одним куском данные в "куче" не поместятся (нельзя запросить у ОС больше 64К за один раз, а тебе нужно 50000*6=300000байт, т.е. больше 292К)... А если разбить массив на несколько кусков, то как именно их потом сортировать (тут понадобится и слияние отсортированных кусков)...
Нужно пользоваться именно Турбо-Паскалем?
User4225
4.10.2005 23:24
Да, нужен именно Паскаль. Программу для сортировки действительных масивов размером [1..255] уже написал, а что делать дальше - не знаю.
User4225
4.10.2005 23:28
И ещё: мне сказали, что у ОП можно запросить за раз от 640К до 1М. Это возможно, если использвать Паскаль?
volvo
4.10.2005 23:44
Хотя, в принципе, можно все сделать достаточно просто... Смотри, принцип такой:
{ Описываешь ОченьДлинный Массив }type
PTOnePart = ^TOnePart;
TOnePart = Array[1 .. 10000] Of Real;
TVeryLongArray = Array[1 .. 5] Of PTOnePart;
{ Это для размещения большего массива в "куче" }Procedure CreateArray(var arr: TVeryLongArray);
var i: integer;
BeginFor i := 1To5Do
GetMem(arr[i], 10000 * SizeOf(Real));
End;
{ Удаление массива из "кучи" }Procedure DeleteArray(var arr: TVeryLongArray);
var i: integer;
BeginFor i := 1To5Do
FreeMem(arr[i], 10000 * SizeOf(Real));
End;
{ Для "чтения" элемента из массива: }Function GetElement(var arr: TVeryLongArray;
_index: LongInt): Real;
Begin
GetElement := arr[(_index div10000) + 1]^[(_index mod10000) + 1];
End;
{ Для "записи" элемента в массив: }Procedure SetElement(var arr: TVeryLongArray;
_index: LongInt; _value: Real);
Begin
arr[(_index div10000) + 1]^[(_index mod10000) + 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:
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.