|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.12.2011, 16:28 | #1 |
Новичок
Джуниор
Регистрация: 20.12.2011
Сообщений: 1
|
Задача хитрая сортировка на Pascal и C++ - перевести на Java
Помогите, пожалуйста, нужно перевести задачу на Java, есть решение на Pascal и на C++
Текст Задачи. Из массива путем однократного просмотра выбирается последовательность элементов, расположенных в порядке возрастания, переноситься в выходной массив и заменяется во входном на -1. Затем оставшиеся элементы включаются в полученную упорядоченную последовательность методом «погружения», когда очередной элемент путем ряда обменов «погружается» до требуемой позиции в уже упорядоченную часть массива. Текст на C++ #include<stdio.h> #include<stdio.h> void sort(int n);//прототип функции сортировки void swap(int *p1,int *p2);//функция которая меняет местами две переменные int enter[10]={39,12,41,21,53,10,8,45,60,50};//Входной массив int exit[10]; int exit[10];// Выходной массив int main() { int k; printf("Neotsortirovaniy massiv\n"); for(k = 0; k < 10; ++k) //обычный цикл с десятью итерациями (нужен для вывода входного массива) printf("%d ",enter[k]); вывод элементов входного массива printf("\n\n"); sort(10);// вызов функции сортировки printf("Otsortirovaniy massiv \n"); for(int i = 0; i < 10; ++i)почти такой же цикл для вывода выходного массива printf("%d ", exit[i]); соответственно вывод printf("\n\n"); return 0; } void sort(int n) { int amax, imax, t = 0; максимальный элемент, номер макс элемента amax = enter[0]; записываем нулевой элемент как максимальный exit[0] = amax; переносим в выходной массив for(int i = 0; i < n; ++i) цикл { imax = i; максимальный номер приравниваем к текущей итерации цикла for(int j = i + 1; j < n; ++j) if(enter[j] > amax) если значение больше максимального { ++t; наращиваем t на единицу exit[t] = enter[j]; переносим элемент во второй массив enter[imax] = -1; соответсвенно в первыый массив заносим -1 amax = enter[j]; заменяем максимальное значение imax = j; заменяем номер максимального enter[imax] = -1; } } for(i = 0; i < n; ++i) for(i = 0; i < n; ++i)проверка оставшихся элементов и перенос их. { if(enter[i] != -1) { ++t; exit[t] = enter[i]; enter[i] = -1; } } // вставка погружением/ проверка выходного массива и престановка элементов в порядке возрастания for(i = 0; i < n - t; ++i) { for(t = i + t; t > 0; --t) { if(exit[t] < exit[t - 1]) swap(&exit[t], &exit[t - 1]); перестановка элементов местами если они неправильно стоят с очки зрения порядка } } } void swap(int *p1, int *p2) void swap(int *p1, int *p2) переставляем местами 2 элемента. { int temp = *p1; *p1 = *p2; *p2 = temp; } Текст на Pascal uses crt; const nmax=100; var a,b:array[1..nmax] of integer; n,m,i,j,k:integer; begin randomize; repeat write('Размер массива до ',nmax,' n='); read(n); until n in [1..nmax]; writeln('Исходный массив:'); for i:=1 to n do begin a[i]:=random(50); write(a[i]:4); end; writeln; //выбираем по возрастанию m:=1; b[m]:=a[1]; for i:=2 to n do if a[i]>b[m] then begin m:=m+1; b[m]:=a[i]; a[i]:=-1; end; writeln('Исходный массив В:'); for i:=1 to m do write(b[i]:4); writeln; //вставляем остальные for i:=2 to n do if a[i]<>-1 then if a[i]>=b[m] then begin m:=m+1; b[m]:=a[i]; end else begin for j:=1 to m do if b[j]>=a[i] then begin m:=m+1; for k:=m downto j+1 do b[k]:=b[k-1]; b[j]:=a[i]; break; end; end; writeln('Результат сортировки:'); for i:=1 to m do write(b[i]:4); end. |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Хитрая задача | old slon | Помощь студентам | 4 | 13.05.2009 23:49 |
Хитрая задача | Marsik | Помощь студентам | 11 | 21.11.2007 18:34 |