Помогите!!!!! Используя датчик случайнх чисел, поместить в динамическую память массив действительных чисел без повторений колличеством 50000 элементов. Упорядочить эти элементы по возрастанию методами Шелла, Хоора, выбора и пузырька, а потом ещё вывести общее время, потраченное каждым методом на сортировку.
volvo
4.10.2005 18:52
Не все так просто... Одним куском данные в "куче" не поместятся (нельзя запросить у ОС больше 64К за один раз, а тебе нужно 50000*6=300000байт, т.е. больше 292К)... А если разбить массив на несколько кусков, то как именно их потом сортировать (тут понадобится и слияние отсортированных кусков)...
Нужно пользоваться именно Турбо-Паскалем?
User4225
4.10.2005 19:24
Да, нужен именно Паскаль. Программу для сортировки действительных масивов размером [1..255] уже написал, а что делать дальше - не знаю.
User4225
4.10.2005 19:28
И ещё: мне сказали, что у ОП можно запросить за раз от 640К до 1М. Это возможно, если использвать Паскаль?
volvo
4.10.2005 19:44
Хотя, в принципе, можно все сделать достаточно просто... Смотри, принцип такой:
{ Описываешь ОченьДлинный Массив } 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:
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.